Zalecane, 2024

Wybór Redakcji

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

HashMap i LinkedHashMap są klasami dość podobnymi do siebie i służą do tworzenia mapy. Klasa HashMap rozszerza klasę AbstractMap, aby użyć tabeli mieszania do przechowywania elementów na mapie. Klasa LinkedHashMap przechowuje wpisy na mapie na podstawie ich zamówienia reklamowego. Cechą odróżniającą HashMap i LinkedHashMap od siebie jest to, że Hashmap nie zachowuje porządku zapisanych wpisów na mapie. Z drugiej strony, LinkedHashMap wykorzystuje hybrydową strukturę danych do utrzymywania porządku wpisów, do których zostały wstawione. W poniższej tabeli porównawczej zbadałem kilka innych różnic między HashMap i LinkedHashMap, wystarczy rzucić okiem.

Wykres porównania

Podstawa do porównaniaHashMapLinkedHashMap
PodstawowyZamówienie reklamowe w HashMap nie jest zachowywane.Zamówienie reklamowe jest zachowywane w LinkedHashMap.
Struktura danychHashMap używa HashTable do przechowywania map.LinkedHashMap używa HashTable wraz z Listą Połączeń do przechowywania mapy.
Rozszerza / narzędziaHashMap rozszerza AbstractMap i implementuje interfejs Map.LinkedHashMap rozszerza Hashmap.
WersjaHashMap został wprowadzony w JDK 2.0.LinkedHashMap został wprowadzony w JDK 4.0.
Nad głowąStosunkowo mniej narzutów.Stosunkowo więcej narzutów, ponieważ musi utrzymywać porządek w pozycjach mapy.

Definicja HashMap

HashMap to klasa używana do tworzenia mapy. Implementuje interfejs mapy . Rozszerza również klasę AbstractMap, dzięki czemu może używać tabeli mieszania do przechowywania wpisów na mapie. Wpisy mapy to para, w której każdy klucz jest powiązany z wartością. Klucz w pozycji jest używany do pobierania wartości, klucz musi być unikalny. Dlatego powielone klucze nie są dozwolone w HashMap. Ale klucz w każdym wpisie mapy może mieć inny typ, tj. Klucze na mapie utworzone przez HashMap mogą być heterogeniczne. Struktura danych używana przez HashMap do przechowywania mapy jest tablicą skrótów.

Kolejność wstawiania wpisów w HashMap nie jest zachowywana. Wstawianie wpisów na mapie utworzonych za pomocą HashMap opiera się na kodzie haszującym obliczonym przez klucze we wpisach. Jeśli przez pomyłkę wprowadziłeś zduplikowany klucz w HashMap, zastąpi on poprzednią wartość tego klucza nową zaproponowaną wartością i zwróci starą wartość. Jeśli nie zostanie użyty żaden duplikat klucza i nie nastąpi wymiana, klucz zawsze zwraca wartość Null. Zobaczmy, jak dodać wpisy do mapy skrótów za pomocą następującego przykładu.

 Hashmap hm = new Hashmap (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Jordan", 200); System.out.println (hm); / * output * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordan = 200} 

Podobnie jak w powyższym kodzie, widzisz, że utworzyłem obiekt HashMap i dodałem wpisy za pomocą metody puts, a kiedy wydrukowałem obiekt HashMap, wpisy nie są drukowane w kolejności, w jakiej zostały wstawione. Dlatego nie możesz udawać, że kolejność wpisów w HashMapie powróci. HashMap wykorzystuje wszystkie metody interfejsu Map i klasy AbstractMap i nie wprowadza żadnej nowej metody; ma swoich własnych konstruktorów. Domyślna pojemność mapy skrótu wynosi 16, a domyślny współczynnik wypełnienia wynosi 0, 75 .

Definicja LinkedHashMap

LinkedHashMap jest również klasą używaną do tworzenia map. LinkedHashMap rozszerza klasę HashMap i została wprowadzona później do HashMap w wersji JDK 4.0. Jako klasa potomna klasy HashMap LinkedHashMap jest dokładnie taka sama jak klasa HashMap, w tym konstruktory i metody. Jednak LinkedHashMap różni się w tym sensie, że zachowuje kolejność wstawiania wpisów na mapie. Struktura danych używana przez LinkedHashMap do przechowywania mapy to lista połączona i tabela mieszania .

Oprócz metod dziedziczonych przez HashMap, LinkedHashMap wprowadza jedną nową metodę, która jest removeEldestEntry () . Ta metoda służy do usuwania najstarszego wpisu na mapie. Domyślna pojemność LinkedHashMap wynosi 16, a domyślny współczynnik wypełnienia to 0, 75, który jest również podobny do klasy HashMap.

Kluczowe różnice między HashMap i LinkedHashMap w Javie

  1. Najważniejszą różnicą jest to, że kolejność wstawiania HashMap nie jest zachowywana, podczas gdy kolejność wstawiania LinkedHashMap jest zachowywana .
  2. Struktura danych używana przez HashMap do przechowywania elementów mapy to Hashtable . Z drugiej strony struktura danych używana przez LinkedHashMap to lista Linked i HashTable .
  3. Klasa HashMap rozszerza klasę AbstractMap i implementuje interfejs Map . Jednak klasa LinkedHashMap jest klasą potomną klasy HashMap, tzn. Klasa LinkedHashMap rozszerza klasę HashMap.
  4. Klasa HashMap została wprowadzona w wersji JDK 2.0 . Klasa LinkedHashMap została wprowadzona później w wersji JDK 4.0 .
  5. Porównawcza klasa LinkedHashMap ma więcej narzutów niż HashMap, ponieważ musi utrzymywać porządek elementów wstawionych do mapy.

Wniosek:

LinkedHashMap można używać tylko wtedy, gdy niepokoi nas kolejność elementów wstawionych na mapę.

Top