Różnica między HashMap a LinkedHashMap

HashMap i LinkedHashMap to dwie najpopularniejsze i uniwersalne implementacje map na platformie Java. Są to w zasadzie klasy oparte na haszowaniu, całkiem do siebie podobne i służą do tworzenia mapy. Interfejs mapy jest ostatnim z głównych interfejsów kolekcji Framework, który definiuje operacje obsługiwane przez zestaw skojarzeń klucz-wartość, w których klucze są unikalne. Te implementacje map są oparte na algorytmie mieszającym. Podczas gdy klasa HashMap implementuje mapy nieuporządkowane, klasa LinkedHashMap implementuje mapy uporządkowane. Implementacja LinkedHashMap jest podklasą klasy HashMap, co oznacza, że ​​dziedziczy ona funkcje klasy HashMap. Nie ma dużej różnicy między nimi pod względem wydajności. Spójrzmy.

Co to jest HashMap? 

HashMap jest jedną z najczęstszych i czterech spośród ogólnych implementacji interfejsu Map w Javie opartego na algorytmie mieszającym. Jest analogiczny do ustawionej klasy HashSet, chociaż elementy są nieuporządkowane w obu klasach. Jest zaimplementowany jako tabela skrótów, ale w przeciwieństwie do LinkedHashMap, nie utrzymuje żadnej kolejności kluczy ani wartości. Ogólnie rzecz biorąc, HashMap zapewnia stałą wydajność dla opcji put i get. Klasa nie jest bezpieczna dla wątków, ale dopuszcza jeden klucz zerowy i wiele wartości zerowych. Ponieważ nie utrzymuje kolejności iteracji, wymaga mniej pamięci.

Co to jest LinkedHashMap?

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

Różnica między HashMap a LinkedHashMap

  1. Podstawy HashMap vs. LinkedHashMap

HashMap to oparta na haszowaniu implementacja interfejsu Map w Javie. Mapy są zbiorem par klucz-wartość i są używane, gdy listy znajdują się w uporządkowanym zbiorze. HashMap to klasa Collection, która przechowuje wartość w parach klucz-wartość. Mówiąc prościej, mapuje klucze na wartości, co oznacza, że ​​może zlokalizować wartość na podstawie klucza. LinkedHashMap to implementacja listy map interfejsu Map, podobnie jak HashMap, z tym wyjątkiem, że utrzymuje porządek wstawianych do niej elementów. Jest to podklasa HashMap, która dziedziczy jej funkcje. LinkedHashMap udoskonala umowę swojej klasy nadrzędnej, HashMap, gwarantując kolejność, w której iteratory zwracają swoje elementy.

  1. Kolejność iteracji

Kluczową różnicą między HashMap i LinkedHashMap jest kolejność. Elementy HashMap nie są uporządkowane, całkowicie losowe, podczas gdy elementy LinkedHashMap są uporządkowane. Wpisy LinkedHashMap znajdują się w kolejności wprowadzania kluczy, czyli w kolejności, w której klucze są wstawiane na mapie. Oznacza to, że pierwszy klucz wstawiony do mapy jest najpierw wyliczony, podobnie jak wartość z nim związana, a ostatni wpis wstawiony jako ostatni. LinkedHashMap ma przewidywalną kolejność iteracji, co oznacza, że ​​może również utrzymywać swoje elementy w kolejności dostępu, czyli kolejności, w której dostęp do wpisów.

  1. Realizacja

Zarówno klasy HashMap, jak i LinkedHashMap używają haszowania do implementacji interfejsu Map w Javie, z wyjątkiem tego, że HashMap jest implementowany jako tablica skrótów, natomiast LinkedHashMap utrzymuje podwójnie połączoną listę segmentów przechodzących przez wszystkie jej wpisy. Właśnie dlatego LinkedHashMap wymaga więcej pamięci niż HashMap, ponieważ w przeciwieństwie do HashMap zachowuje porządek. Usuwa chaotyczne zamawianie przez HashMap, bez ponoszenia dodatkowych kosztów, które zostałyby poniesione w przeciwnym razie z TreeMap. Poza tym klasa LinkedHashMap jest bardzo podobna do klasy HashMap pod wieloma względami, takimi jak synchronizacja i klucze / wartości null, ponieważ oba pozwalają na jeden klucz null i wiele wartości null.

  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 kolejności iteracji mapy. Operacje, takie jak dodawanie, usuwanie lub znajdowanie wpisów na podstawie klucza, mają stały czas, ponieważ mieszają klucz. Tak więc dodawanie, usuwanie i wyszukiwanie pozycji w LinkedHashMap może być nieco wolniejsze niż w HashMap, ponieważ utrzymuje podwójnie połączoną listę segmentów w Javie. Ponadto HashMap wymaga mniej pamięci niż LinkedHashMap, ponieważ nie jest utrzymywane żadne zamówienie.

HashMap vs. LinkedHashMap: Tabela porównawcza

Podsumowanie Vs HashMap LinkedHashMap

Podczas gdy obie klasy HashMap i HashMap są prawie podobne pod względem wydajności, HashMap wymaga mniej pamięci niż LinkedHashMap, ponieważ nie gwarantuje kolejności iteracji mapy, co sprawia, że ​​dodawanie, usuwanie i znajdowanie wpisów w HashMap jest stosunkowo szybsze niż robienie tego samego z LinkedHashMap. Jednak kluczową różnicą między nimi jest kolejność: elementy HashMap nie są uporządkowane, podczas gdy elementy LinkedHashMap są domyślnie w kolejności wstawiania kluczy, co oznacza kolejność, w której klucze są wstawiane do mapy. LinkedHashMap może również utrzymywać swoje elementy w kolejności dostępu, co oznacza kolejność, w jakiej dostęp do wpisów. Podobnie jak w przypadku LinkedHashMap, należy utrzymywać podwójnie połączoną listę, która ma mniejszą wydajność niż HashMap.