Wykres porównania
Podstawa do porównania | HashMap | LinkedHashMap |
---|---|---|
Podstawowy | Zamówienie reklamowe w HashMap nie jest zachowywane. | Zamówienie reklamowe jest zachowywane w LinkedHashMap. |
Struktura danych | HashMap używa HashTable do przechowywania map. | LinkedHashMap używa HashTable wraz z Listą Połączeń do przechowywania mapy. |
Rozszerza / narzędzia | HashMap rozszerza AbstractMap i implementuje interfejs Map. | LinkedHashMap rozszerza Hashmap. |
Wersja | HashMap 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
- Najważniejszą różnicą jest to, że kolejność wstawiania HashMap nie jest zachowywana, podczas gdy kolejność wstawiania LinkedHashMap jest zachowywana .
- 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 .
- Klasa HashMap rozszerza klasę AbstractMap i implementuje interfejs Map . Jednak klasa LinkedHashMap jest klasą potomną klasy HashMap, tzn. Klasa LinkedHashMap rozszerza klasę HashMap.
- Klasa HashMap została wprowadzona w wersji JDK 2.0 . Klasa LinkedHashMap została wprowadzona później w wersji JDK 4.0 .
- 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ę.