Różnica między HashMap i Hashtable w Javie

Autor: Laura McKinney
Data Utworzenia: 2 Kwiecień 2021
Data Aktualizacji: 5 Móc 2024
Anonim
Różnica między HashMap i Hashtable w Javie - Technologia
Różnica między HashMap i Hashtable w Javie - Technologia

Zawartość


HashMap i Hashtable, oba służą do przedstawienia grupa obiektów które są reprezentowane w para. Każdy para jest nazywana Wejście obiekt. The kolekcja wpisów jest określany przez obiekt HashMap i Hashtable. Klucze w kolekcji muszą być unikalne lub charakterystyczne. Różnica między HashMap i Hashtable jest taka HashMap w szczególności implementuje interfejs mapy, podczas gdy Hashtable rozszerza klasę Dictionary (klasę starszą), która została przeprojektowana w celu implementacji interfejsu Map. Inną ważną różnicą jest to, że są obiektami HashMap niezsynchronizowane podczas gdy obiektami Hashtable jest zsynchronizowany.

Zobaczmy tabelę porównawczą pokazaną poniżej, aby dowiedzieć się więcej o różnicach między HashMap i Hashtable.

  1. Wykres porównania
  2. Definicja
  3. Kluczowe różnice
  4. Podobieństwa
  5. Wniosek

Wykres porównania

Podstawa do porównaniaHashMapHashtable
Implementuj / przedłużKlasa HashMap implementuje interfejs Map i rozszerza klasę AbstractMap.Hashtable rozszerza klasę Dictionary Legacy, ale został przeprojektowany i teraz implementuje również interfejs Map.
SynchronizacjaHashMap nie jest zsynchronizowany, a zatem obiekt HashMap nie jest bezpieczny dla wątków.Hashtable jest zsynchronizowany, a zatem obiekt Hashtable jest bezpieczny dla wątków.
Klucze / wartośćKlucz może zwrócić wartość Null tylko raz, ale wartość może zwrócić wartość Null dowolną liczbę razy.Klucz nie może zwrócić wartości Null, ponieważ jest używany do uzyskania kodu skrótu, który będzie używany jako indeks tabeli skrótów, ani wartość nie może zwrócić wartości Null.
Domyślna pojemność początkowaDomyślna początkowa pojemność HashMap to 16.Domyślna początkowa pojemność Hashtable to 11.
PrzemierzanieHashMap jest obsługiwany przez Iterator.Podobnie jak klasa mapy Hashtable również nie obsługuje bezpośrednio Iteratora do przechodzenia i dlatego używa Enumeratora.


Definicja HashMap

HashMap to klasa implementująca Mapa interfejs i rozszerza AbstractMap klasa korzysta z tabeli skrótów. Obiekt HashMap odnosi się do zbioru / zestawu para, w której każdy klucz jest mapowany na określoną wartość. Klucze w kolekcji muszą być unikalne, ponieważ służą do pobierania wartości. Z drugiej strony wartości w kolekcji można powielić. Deklaracja klasy HashMap i konstruktory HashMapclass są następujące:

/ * K reprezentuje klucz, a V reprezentuje wartość * / class HashMap / * Konstruktory klasy HashMap * / HashMap () HashMap (Mapa <? Rozszerza K,? Rozszerza V> m) HashMap (int pojemność) HashMap (int pojemność, float fillRatio)

Pierwszy konstruktor jest domyślnym konstruktorem, który inicjuje pusty obiekt HashMap o domyślnej pojemności 16 i domyślnym współczynniku wypełnienia 0,75. Drugi konstruktor inicjuje mapę skrótu wartością m. Trzeci konstruktor tworzy mapę skrótu o początkowej pojemności odpowiadającej wartości podanej w argumencie „pojemność”. Czwarty konstruktor inicjuje mapę mieszania o pojemności i współczynniku wypełnienia podanym w parametrach. nauczmy się teraz, jak karmić wpisy na mapie mieszającej.


Hashmap hm = new Hashmap (); hm.put („Ajay”, 275); hm.put („Vijay”, 250); hm.put („Jonny”, 150); hm.put („Jordan”, 200); System.out.ln (hm); / * wyjście * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordan = 200}

W powyższym kodzie widać, że utworzyłem pusty obiekt HashMap hm z domyślną pojemnością początkową i domyślnym współczynnikiem wypełnienia. Następnie wstawiłem cztery wpisy do mapy skrótów za pomocą metody put (K, V), która odwzorowuje klucz na wartość. Możesz zauważyć, że wpisy nie są edytowane w sekwencji, w której je podajesz, ponieważ kolejność wstawiania nie jest stała. Teraz rozważ przypadek, w którym masz już wpis na mapie hash, a następnie próbujesz wstawić put (K1, V5), tj. próbujesz zmapować ten sam klucz z inną wartością. Następnie metoda put zastąpi starą wartość V1 nową wartością V2 i zwróci starą wartość V1, w przeciwnym razie, jeśli nigdy nie spróbujemy zastąpić wartości klucza, wówczas metoda put zwraca Null dla tego klucza.

Definicja Hashtable

Hashtable to klasa rozszerzająca Słownik klasa, która jest klasą starszą i została przeprojektowana do implementacji Mapa berło. Hashtable używa tabeli skrótów jako struktury danych. Hashtable jest podobny do HashMap, ponieważ tutaj również obiekt Hashtable odnosi się do zbioru wpisów, gdzie każdy wpis jest parą . Z drugiej strony wszystkie klucze w kolekcji muszą być unikalne, wartości można powielać. Klucze są szczególnie używane do uzyskania wartości kodu skrótu, która decyduje o indeksie, w którym para będzie przechowywana w tabeli skrótów. W tabeli skrótów ani klucz, ani wartość nie mogą zwrócić wskaźnika Null. Zobaczmy deklarację klasy Hashtable i konstruktorów klasy hashtable.

/ * K określa klucz, a V określa wartość powiązaną z kluczem * / class Hashtable / * konstruktory Hashtable * / Hashtable () Hashtable (int rozmiar) Hashtable (int rozmiar, float fillRatio) Hashtable (Mapa <? rozszerza K,? rozszerza V> m)

W powyższym kodzie pierwszy konstruktor jest domyślnym konstruktorem, który tworzy pusty obiekt klasy Hashtable, jego domyślny rozmiar to 11, a domyślny współczynnik wypełnienia to 0,75. Drugi konstruktor tworzy tablicę skrótów o rozmiarze odpowiadającym wartości podanej w parametrze „rozmiar”. Trzeci konstruktor tworzy tablicę skrótów o rozmiarze i współczynniku wypełnienia podanym w parametrze. Czwarty konstruktor inicjuje tablicę skrótów wartością m. Nauczmy się teraz, jak wstawić para w tabeli skrótów.

Hashtable ht = new Hashtable (); ht.put (nowy hashCode (2), 275); ht.put (nowy hashCode (12), 250); ht.put (nowy hashCode (16), 150); ht.put (nowy hashCode (8), 200); System.out.ln (ht); / * wyjście * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

W powyższym kodzie stworzyłem pusty obiekt Hashtable i wstawiłem cztery wpisy za pomocą metody put (). Wewnątrz metody put nazwałem hashCode (), która oblicza i zwraca wartość kodu skrótu, która będzie działać jako wartość indeksu dla obiektu wejściowego. Jak widać, nie wspominałem o wielkości tabeli skrótów, więc domyślnie będzie to 11. Tutaj również kolejność wstawiania nie jest zachowywana, a zatem, gdy ed wpisy nie pojawiały się w kolejności, były podawane.

  1. Implementuje HashMap Mapa interfejs i rozszerza klasę abstrakcyjną, AbstractMap podczas gdy Hashtable rozszerza klasę abstrakcyjną Słownik, która jest również klasą Legacy, później przeprojektowaną do implementacji Mapa berło.
  2. Obiekt HashMap to niezsynchronizowane tzn. może działać na nim wiele wątków jednocześnie, a zatem obiekty nie są bezpieczne dla wątku. Z drugiej strony obiektami Hashtable są zsynchronizowany tzn. jeśli wątek chce działać na obiekcie Hashtable, musi uzyskać blokadę na tym obiekcie, aby żaden inny wątek nie mógł uzyskać dostępu do tego obiektu, a zatem jest wątek bezpieczny.
  3. W HashMap klucz może wrócić Zero tylko raz, a wartość może zwrócić Null wiele razy. Z drugiej strony, klucz nigdy nie może zwrócić wartości Null, ponieważ jest używany do uzyskania wartości kodu skrótu, który jest używany jako indeks do przechowywania para i ani wartość nie mogą zwracać Null.
  4. Domyślna pojemność tabeli skrótów w klasie HashMap to 16 podczas gdy domyślna pojemność tabeli skrótów w Hashtable to 11.
  5. The Iterator może przechodzić przez wpisy Hashmap. Z drugiej strony Hashtable nie obsługuje bezpośrednio Iteratora, a zatem ogólnie Moduł wyliczający służy do przechodzenia przez wpisy w Hashtable.

Podobieństwa:

  • Zarówno HashMap, jak i Hashtable używają struktury danych tabela mieszania.
  • HashMap i Hashtable oba narzędzia Mapa berło
  • Kolejność wprowadzania nie jest zachowana zarówno w HashMap, jak i Hashtable i na podstawie kodu skrótu uzyskanego za pomocą kluczy.
  • W HashMap i Hashtable klucze muszą być wyjątkowy podczas gdy wartości mogą być zduplikowane.
  • HashMap i Hashtable mogą zawierać oba obiekty heterogeniczne zarówno dla kluczy, jak i wartości.
  • HashMap i Hashtable, oba narzędzia Serializowalny i Klonowalne interfejsy, ale nie, losowy dostęp.
  • Zarówno HashMap, jak i Hashtable mają domyślny współczynnik wypełnienia 0.75.
  • HashMap i Hashtable najlepiej nadają się do pobierania lub badawczy operacje.

Wniosek:

HashMap ma lepszą wydajność, ponieważ jego obiekty są niezsynchronizowane, a wiele wątków może na nim działać jednocześnie, a zatem jest szybszy niż Hashtable.