HashMap i LinkedHashMap

Anonim

HashMap i LinkedHashMap są dwiema najbardziej powszechnymi implementacjami Map ogólnego zastosowania na platformie Java. Są to w zasadzie klasy oparte na hashu, dość podobne do siebie i używane do tworzenia mapy. Interfejs mapy jest ostatnim z głównych interfejsów kolekcji zbiorów, który definiuje operacje obsługiwane przez zestaw powiązań między kluczami, w których klucze są unikalne. Te wdrożenia Map oparte są na algorytmie mieszania. Podczas gdy klasa HashMap implementuje nieuporządkowane mapy, klasa LinkedHashMap implementuje uporządkowane mapy. Implementacja LinkedHashMap jest podklasą klasy HashMap, co oznacza, że ​​dziedziczy ona funkcje klasy HashMap. Nie ma dużej różnicy między tymi dwoma pod względem wydajności. Spójrzmy.

Co to jest HashMap?

HashMap jest jedną z najczęstszych i spośród czterech implementacji ogólnego przeznaczenia interfejsu Map w Javie w oparciu o algorytm mieszający. Jest to analogiczne do zestawu klasy HashSet, chociaż elementy są nieuporządkowane w obu klasach. Jest on zaimplementowany jako tablica asocjacyjna, ale w przeciwieństwie do LinkedHashMap, nie utrzymuje żadnej kolejności na kluczach ani wartościach. Ogólnie rzecz biorąc, HashMap zapewnia stałą wydajność podczas wprowadzania i pobierania. Klasa nie jest wątkowo bezpieczna, ale dopuszcza jeden pusty klucz i wiele wartości pustych. Ponieważ nie utrzymuje porządku iteracyjnego, wymaga mniej pamięci.

Co to jest LinkedHashMap?

LinkedHashMap jest jedną z czterech implementacji ogólnego interfejsu Map, która jest podklasą klasy HashMap, co oznacza, że ​​dziedziczy ona swoje funkcje. Chociaż jest bardzo podobny do HashMap pod względem wydajności, z tym, że zachowuje kolejność wstawiania kluczy, w kolejności, w której klucze są wstawiane do mapy lub kolejności, w której dostęp do nich jest uzyskiwany na mapie. Zawęża umowę swojej klasy nadrzędnej, gwarantując kolejność, w której iteratory zwracają swoje elementy. Wymaga jednak więcej pamięci niż HashMap, ponieważ utrzymuje podwójnie połączoną listę w Javie.

Różnica między HashMap i LinkedHashMap

  1. Podstawy VS HashMap. LinkedHashMap

HashMap to oparte na haszowaniu wdrożenie interfejsu Map w Javie. Mapy są zbiorem par klucz-wartość i są używane, gdy Listy są w kolekcji uporządkowanej. HashMap to klasa kolekcji, która przechowuje wartość w parach klucz-wartość. Mówiąc prosto, mapuje klucze do wartości, co oznacza, że ​​może zlokalizować wartość na podstawie klucza. LinkedHashMap jest połączoną listą implementacją interfejsu Map podobnie jak HashMap, z tą różnicą, że utrzymuje porządki elementów wstawionych do niej. Jest to podklasa HashMap, która dziedziczy jego funkcje. LinkedHashMap udoskonala kontrakt swojej klasy nadrzędnej, HashMap, gwarantując kolejność, w której iteratory zwracają swoje elementy.

  1. Kolejność iteracji

Podstawową różnicą między HashMap i LinkedHashMap jest kolejność. Elementy mapy HashMap nie są uporządkowane, całkowicie losowe, podczas gdy są uporządkowane elementy LinkedHashMap. Wpisy w LinkedHashMap znajdują się w kluczowej kolejności wstawiania, czyli kolejności, w jakiej klucze są wstawiane do mapy. Oznacza to, że pierwszy klucz wstawiony do mapy jest najpierw wyliczany, tak samo jak wartość skojarzona z nim i ostatnia pozycja wstawiona jako wyliczona jako ostatnia. LinkedHashMap ma przewidywalny porządek iteracji, co oznacza, że ​​może również utrzymywać swoje elementy w kolejności dostępu, czyli w kolejności, w której dostęp do nich jest możliwy.

  1. Realizacja

Zarówno klasy HashMap, jak i LinkedHashMap używają mieszania w celu implementacji interfejsu Map w Javie, z tym że HashMap jest zaimplementowany jako tablica haszująca, podczas gdy LinkedHashMap utrzymuje podwójnie połączoną listę Wiadrów przebiegającą przez wszystkie jej wpisy. Dlatego LinkedHashMap wymaga więcej pamięci niż HashMap, ponieważ w przeciwieństwie do HashMap, utrzymuje zamówienie. Usuwa chaotyczną kolejność przez HashMap, bez ponoszenia dodatkowych kosztów, które w przypadku TreeMap zostałyby poniesione w inny sposób. Poza tym klasa LinkedHashMap jest bardzo podobna do klasy HashMap w wielu aspektach, takich jak synchronizacja i wartości / wartości null, ponieważ oba umożliwiają jeden pusty klucz i wiele wartości pustych.

  1. Wydajność dla HashMap vs. LinkedHashMap

Chociaż obie klasy zapewniają porównywalną wydajność, uważa się, że klasa HashMap jest preferowanym wyborem, jeśli zamówienie nie stanowi problemu, ponieważ nie gwarantuje porządku iteracyjnego mapy. Operacje takie jak dodawanie, usuwanie lub wyszukiwanie wpisów na podstawie klucza są stałe, ponieważ zawierają klucz. Dodanie, usunięcie i znalezienie wpisów w LinkedHashMap może być nieco wolniejsze niż w HashMap, ponieważ utrzymuje podwójnie połączoną listę Wiadek w Javie. Dodatkowo HashMap wymaga mniej pamięci niż LinkedHashMap, ponieważ nie jest utrzymywane żadne zamówienie.

HashMap vs. LinkedHashMap: Tabela porównawcza

Podsumowanie Vs HashMap. LinkedHashMap

Chociaż zarówno klasy HashMap, jak i HashMap są prawie identyczne pod względem wydajności, HashMap wymaga mniej pamięci niż LinkedHashMap, ponieważ nie gwarantuje porządku iteracyjnego mapy, co powoduje, że dodawanie, usuwanie i znajdowanie wpisów w HashMap jest relatywnie szybsze niż w przypadku tego samego z a LinkedHashMap. Jednak kluczową różnicą między nimi jest kolejność: elementy mapy HashMap nie są uporządkowane, podczas gdy elementy LinkedHashMap znajdują się w kluczowej kolejności wstawiania, co oznacza kolejność, w jakiej klucze są wstawiane do mapy. LinkedHashMap może również utrzymywać swoje elementy w kolejności dostępu, co oznacza kolejność, w jakiej wpisy są dostępne.Podobnie jak w przypadku LinkedHashMap, podwójnie połączona lista musi być utrzymana, ma mniejszą wydajność niż HashMap.