Różnice między HashMap i HashTable w Javie
Opublikowany: 2021-06-02Jeśli uczysz się o Javie i jej aplikacjach, na pewno natknąłeś się na HashMap i HashTable. Obie są jednymi z najważniejszych klas we frameworku Java Collection. Będziesz ich intensywnie używać podczas programowania w Javie, dlatego ważne jest, aby zrozumieć ich różnice.
W kolejnych punktach omówimy szczegółowo temat HashTable vs HashMap i wyjaśnimy różnice między nimi:
Spis treści
Co to jest HashMap?
HashMap jest w kolekcji Javy od czasu wprowadzenia Javy 1.2. Pozwala na wykonanie podstawowych implementacji interfejsu Map w Javie. HashMap przechowuje dane w parach (klucz, wartość) i aby uzyskać do nich dostęp, będziesz musiał użyć indeksu innego typu, takiego jak liczba całkowita.
Tutaj używasz jednego obiektu jako klucza (indeksu) dla innego obiektu (wartości), stąd użycie pary (klucz, wartość). Jeśli dodasz zduplikowany klucz, zastąpi on element odpowiedniego klucza.
Funkcje HashMap
Aby zrozumieć różnice między HashTable a HashMap, najpierw musisz zrozumieć ich funkcje. Dzięki temu zapoznasz się z podstawami ich obu. HashMap posiada następujące funkcje:
- Jest częścią pakietu java.util.
- Rozszerza klasę abstrakcyjną AbstractMap, która zapewnia niekompletną implementację interfejsu Map.
- Wraz z implementacją interfejsu Map, implementuje również interfejsy Serializable i Cloneable.
- Pozwala na zduplikowane wartości, ale nie pozwala na zduplikowane klucze. Oznacza to, że jeden klucz nie może mieć więcej niż jednej wartości, ale wiele kluczy może mieć jedną wartość.
- W HashMap można użyć klucza null tylko raz, ale można użyć wielu wartości null.
- Nie daje żadnych gwarancji co do kolejności mapy, szczególnie tego, czy kolejność pozostanie stała w czasie. HashMap jest prawie podobny do HashTable, ale jest niezsynchronizowany.
- HashSet używa wewnętrznie HashMap.
Co to jest HashTable?
Używasz klasy HashTable, aby zaimplementować tabelę skrótów, która mapuje klucze na wartości. Tutaj możesz użyć obiektów innych niż null jako klucza lub jako wartości. Należy pamiętać, że aby pomyślnie przechowywać i pobierać obiekty z tablicy mieszającej, obiekty użyte jako klucze muszą implementować metodę hashCode i metodę równości.
Hashtable przechowuje dane w formacie tablicy, a każda wartość danych ma unikalną wartość indeksu. Pozwala to na dość szybki dostęp do określonych danych, jeśli znasz wymagany indeks.
Funkcje HashTable
HashTable ma swoje specyficzne cechy, podobnie jak HashMap. Jednak te cechy sprawiają, że jest wyjątkowy i różni się od HashMap pod wieloma względami:
- HashTable jest dość podobny do HashMap, ale jest zsynchronizowany.
- Przechowuje pary klucz-wartość w tablicy mieszającej.
- Tutaj określasz obiekt używany jako klucz i wartość, którą chcesz z nim powiązać. Następnie mieszasz klucz i używasz wygenerowanego kodu skrótu jako indeksu, w którym przechowujesz wartość w tabeli.
- Domyślna pojemność klasy Hashtable to 11, a współczynnik obciążenia 0,75.
- HashMap nie oferuje Enumeration, podczas gdy Hashtable oferuje niezawodną Enumeration.
Różnice między HashMap i HashTable
Teraz, gdy znasz już najważniejsze cechy HashMap i HashTable, porównamy je i zobaczymy wyraźne różnice między nimi:
HashMap | Tabela haszowania |
Jest niezsynchronizowany. Nie możesz udostępniać tutaj wielu wątków bez użycia odpowiedniego kodu synchronizacji, ponieważ nie jest to bezpieczne dla wątków. | Jest zsynchronizowany. Możesz udostępnić go wielu wątkom, ponieważ jest bezpieczny dla wątków. |
Dziedziczy klasę AbstractMap. | Dziedziczy klasę Dictionary. |
Tutaj Iterator szybko spada. | W HashTable Enumerator nie jest szybki. |
Iterator przemierza HashMap. | Enumerator i Iterator przechodzą przez HashTable. |
Możesz zsynchronizować HashMap, wywołując kod Mapa m = Collections.synchronisedMap(hashMap); | Tabele skrótów są synchronizowane wewnętrznie i nie można ich rozsynchronizować z żadnym kodem. |
Jest dość szybki. | Jest stosunkowo wolniejszy niż HashMap. |
HashMap to nowa klasa, która została niedawno wprowadzona w JDK 1.2. | HashTable to starsza klasa. |
Pozwala na wiele wartości null i jeden klucz null. | Nie zezwala na żadne wartości null ani klucz. |
Przykład kodowania
Poniżej znajduje się przykład działania HashMap i HashTable, dzięki czemu można zrozumieć różnice między HashMap a HashTable.
Wejście:
import java.util.*;
import java.lang.*;
importuj java.io.*;
JavaTester klasy publicznej{
public static void main(String args[]){
Hashtable ht=nowa Hashtable();
ht.put(1,”Uday”);
ht.put(1,”Ujjwal”);
ht.put(2, „Szczyt”);
ht.put(3”Vijay”);
System.out.println(„————-Tabela haszująca————–“);
Set<Integer> keySet = ht.keySet();
for (klucz całkowity:zestaw kluczy) {
System.out.println(klucz + ” “+ht.get(klucz));
}
HashMap hm=nowa HashMap();
hm.put(0”Uday”);
hm.put(4,”Uday”); // możesz mieć zduplikowane wartości w hashmapie
hm.put(1, „Szczyt”);
hm.put(2,”Vijay”);
System.out.println(„———–Hash map———–“);
Set<Integer> keySet1 = ht.keySet();
for (klucz całkowity:zestaw kluczy) {
System.out.println(klucz + ” “+hm.get(klucz));
}
}
}
Wyjście:
Tablica haszująca:
3 Vijay
2 szczyt
1 Ujjwal
Mapa skrótu:
0 Uday
1 Szczyt
2 Vijay
4 Uday
Kiedy używać HashMap vs HashTable?
Podstawowym czynnikiem, który określa, czy będziesz używać HashMap czy HashTable, jest synchronizacja. Jeśli potrzebujesz zadania bezpiecznego dla wątków, powinieneś użyć HashTable, ponieważ wszystkie jego metody są zsynchronizowane. Jest to jednak klasa przestarzała i powinieneś ich unikać.
Jeśli masz środowisko wielowątkowe, powinieneś użyć ConcurrentHashMap, ponieważ jest bardzo podobny do HashTable. Pozwala na poprawną synchronizację HashMap.
Zsynchronizowane operacje powodują niską wydajność, dlatego w większości przypadków należy ich unikać. Co więcej, HashMap jest odpowiedni dla środowiska bez wątków, więc możesz z niego łatwo korzystać.
Ucz się kursów oprogramowania online z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.
Wniosek
HashMap i HashTable to popularne kody Java o podobnych funkcjach. Jednak, jak widać, istnieje kilka wyraźnych różnic między tymi dwoma. HashMap to klasa Java, natomiast HashTable to struktura danych.
Jeśli chcesz dowiedzieć się więcej o Javie i innych językach programowania, zalecamy zapoznanie się z naszym Programem Executive PG w tworzeniu oprogramowania ze specjalizacją w tworzeniu pełnego stosu .
Co to jest tablica mieszająca?
Tablica mieszająca to struktura danych kontenera, która jest szeroko stosowana w programowaniu komputerowym. Tabele haszujące służą do przechowywania par klucz-wartość, w których kluczem może być dowolny obiekt. Jako kontener, tablica mieszająca powinna wspierać operacje wstawiania i usuwania. Jako narzędzie do wyszukiwania tablica mieszająca powinna wspierać operację get. Jeśli tablica mieszająca ma być słownikową strukturą danych, powinna również obsługiwać działanie zawiera. Ogólnie rzecz biorąc, tablica mieszająca jest strukturą danych, która jest szeroko stosowana do efektywnego wdrażania operacji wstawiania, usuwania, pobierania i zawierania. Tablica mieszająca jest szeroko stosowana ze względu na jej szybkie działanie.
Czym jest framework kolekcji w Javie?
Java Collections Framework to zestaw interfejsów, klas i algorytmów platformy Java. Jest częścią platformy Java od wersji 1.2. Zawiera interfejsy dla kontenerów, list, kolejek itd., ale zawiera również klasy do obsługi dat i godzin, klasę do obsługi wyrażeń regularnych, inną do obsługi internacjonalizacji i jeszcze inną do obsługi przeszukiwania plików.
Jaka jest relacja między hashtable i hashmap w Javie?
Hashtable to specjalna struktura danych, która kojarzy klucze z wartościami. Klucze mogą być dowolnymi obiektami, ale wszystkie klucze w danej tablicy mieszającej muszą być do siebie porównywalne (czyli używać tych samych lub kompatybilnych interfejsów). W Javie mapa jest specyficznym rodzajem tablicy mieszającej, która jest implementowana za pomocą TreeMap. Klucze w mapie muszą implementować metodę równości, a mapa używa tej metody do określenia, czy dwa klucze są równe, czy nie. Oznacza to, że na mapie przechowywane są tylko klucze, a związane z nimi wartości są obliczane zawsze, gdy jest to potrzebne.