W tym samouczku dowiemy się o klasie Java LinkedHashMap i jej działaniu na przykładach.
LinkedHashMap
Klasa zbiorów ramach Java dostarcza tabeli mieszania i połączone wdrażanie listy interfejsu mapy.
LinkedHashMap
Interfejs rozszerza klasę HashMap przechowywać swoje dane w tabeli mieszania. Wewnętrznie utrzymuje podwójnie połączoną listę wszystkich wpisów, aby uporządkować wpisy.
Tworzenie LinkedHashMap
Aby utworzyć połączoną hashmapę, musimy najpierw zaimportować java.util.LinkedHashMap
pakiet. Po zaimportowaniu pakietu, oto jak możemy utworzyć połączone hashmapy w Javie.
// LinkedHashMap with initial capacity 8 and load factor 0.6 LinkedHashMap numbers = new LinkedHashMap(8, 0.6f);
W powyższym kodzie utworzyliśmy połączony hashmap o nazwie liczby.
Tutaj,
- Klucz - unikalny identyfikator służący do powiązania każdego elementu (wartości) na mapie
- Wartość - elementy skojarzone z kluczami w mapie
Zwróć uwagę na część new LinkedHashMap(8, 0.6)
. Tutaj pierwszy parametr to pojemność, a drugi parametr to loadFactor .
- pojemność - pojemność tego powiązanego hashmapa wynosi 8. Oznacza to, że może przechowywać 8 wpisów.
- loadFactor - Współczynnik obciążenia tej połączonej mapy mieszania wynosi 0,6. Oznacza to, że za każdym razem, gdy nasza mapa skrótów jest zapełniona w 60%, wpisy są przenoszone do nowej tabeli skrótów o rozmiarze dwukrotnie większym niż oryginalna tabela skrótów.
Domyślna pojemność i współczynnik obciążenia
Możliwe jest utworzenie połączonej mapy mieszania bez definiowania jej pojemności i współczynnika obciążenia. Na przykład,
//LinkedHashMap with default capacity and load factor LinkedHashMap numbers1 = new LinkedHashMap();
Domyślnie,
- pojemność połączonego hashmapa będzie wynosić 16
- współczynnik obciążenia wyniesie 0,75
Uwaga : LinkedHashMap
Klasa pozwala nam także określić kolejność jej wpisów. Na przykład
// LinkedHashMap with specified order LinkedHashMap numbers2 = new LinkedHashMap(capacity, loadFactor, accessOrder);
Tutaj accessOrder jest wartością logiczną. Jego domyślną wartością jest false
. W tym przypadku wpisy w powiązanej hashmap są sortowane na podstawie kolejności ich umieszczania.
Jeśli jednak true
zostanie przekazane jako accessOrder, wpisy w połączonej mapie hashmapy będą uporządkowane od najdawniej dostępnego do ostatnio otwieranego.
Tworzenie LinkedHashMap z innych map
Oto, w jaki sposób możemy utworzyć połączoną hashmap zawierającą wszystkie elementy innych map.
import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( // Creating a LinkedHashMap of even numbers LinkedHashMap evenNumbers = new LinkedHashMap(); evenNumbers.put("Two", 2); evenNumbers.put("Four", 4); System.out.println("LinkedHashMap1: " + evenNumbers); // Creating a LinkedHashMap from other LinkedHashMap LinkedHashMap numbers = new LinkedHashMap(evenNumbers); numbers.put("Three", 3); System.out.println("LinkedHashMap2: " + numbers); ) )
Wynik
LinkedHashMap1: (Dwa = 2, Cztery = 4) LinkedHashMap2: (Dwa = 2, Cztery = 4, Trzy = 3)
Metody LinkedHashMap
LinkedHashMap
Klasa udostępnia metody, które pozwalają nam na wykonywanie różnych operacji na mapie.
Wstaw elementy do LinkedHashMap
put()
- wstawia mapowanie określonego klucza / wartości do mapyputAll()
- wstawia wszystkie wpisy z określonej mapy do tej mapyputIfAbsent()
- wstawia mapowanie określonego klucza / wartości do mapy, jeśli określony klucz nie jest obecny w mapie
Na przykład,
import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( // Creating LinkedHashMap of even numbers LinkedHashMap evenNumbers = new LinkedHashMap(); // Using put() evenNumbers.put("Two", 2); evenNumbers.put("Four", 4); System.out.println("Original LinkedHashMap: " + evenNumbers); // Using putIfAbsent() evenNumbers.putIfAbsent("Six", 6); System.out.println("Updated LinkedHashMap(): " + evenNumbers); //Creating LinkedHashMap of numbers LinkedHashMap numbers = new LinkedHashMap(); numbers.put("One", 1); // Using putAll() numbers.putAll(evenNumbers); System.out.println("New LinkedHashMap: " + numbers); ) )
Wynik
Oryginalny LinkedHashMap: (Dwa = 2, Cztery = 4) Zaktualizowany LinkedHashMap: (Dwa = 2, Cztery = 4, Sześć = 6) Nowy LinkedHashMap: (Jeden = 1, Dwa = 2, Cztery = 4, Sześć = 6)
Uzyskaj dostęp do elementów LinkedHashMap
1. Za pomocą entrySet (), keySet () i wartości ()
entrySet()
- zwraca zestaw wszystkich mapowań klucz / wartość mapykeySet()
- zwraca zestaw wszystkich kluczy mapyvalues()
- zwraca zestaw wszystkich wartości mapy
Na przykład,
import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( LinkedHashMap numbers = new LinkedHashMap(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("LinkedHashMap: " + numbers); // Using entrySet() System.out.println("Key/Value mappings: " + numbers.entrySet()); // Using keySet() System.out.println("Keys: " + numbers.keySet()); // Using values() System.out.println("Values: " + numbers.values()); ) )
Wynik
LinkedHashMap: (One=1, Two=2, Three=3) Key/Value mappings: (One=1, Two=2, Three=3) Keys: (One, Two, Three) Values: (1, 2, 3)
2. Using get() and getOrDefault()
get()
- Returns the value associated with the specified key. If the key is not found, it returnsnull
.getOrDefault()
- Returns the value associated with the specified key. If the key is not found, it returns the specified default value.
For example,
import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( LinkedHashMap numbers = new LinkedHashMap(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("LinkedHashMap: " + numbers); // Using get() int value1 = numbers.get("Three"); System.out.println("Returned Number: " + value1); // Using getOrDefault() int value2 = numbers.getOrDefault("Five", 5); System.out.println("Returned Number: " + value2); ) )
Output
LinkedHashMap: (One=1, Two=2, Three=3) Returned Number: 3 Returned Number: 5
Removed LinkedHashMap Elements
remove(key)
- returns and removes the entry associated with the specified key from the mapremove(key, value)
- removes the entry from the map only if the specified key mapped to be the specified value and return a boolean value
For example,
import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( LinkedHashMap numbers = new LinkedHashMap(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("LinkedHashMap: " + numbers); // remove method with single parameter int value = numbers.remove("Two"); System.out.println("Removed value: " + value); // remove method with two parameters boolean result = numbers.remove("Three", 3); System.out.println("Is the entry Three removed? " + result); System.out.println("Updated LinkedHashMap: " + numbers); ) )
Output
LinkedHashMap: (One=1, Two=2, Three=3) Removed value: 2 Is the entry (Three=3) removed? True Updated LinkedHashMap: (One=1)
Inne metody LinkedHashMap
metoda | Opis |
---|---|
clear() | usuwa wszystkie wpisy z mapy |
containsKey() | sprawdza, czy mapa zawiera określony klucz i zwraca wartość logiczną |
containsValue() | sprawdza, czy mapa zawiera określoną wartość i zwraca wartość logiczną |
size() | zwraca rozmiar mapy |
isEmpty() | sprawdza, czy mapa jest pusta i zwraca wartość logiczną |
LinkedHashMap Vs. HashMap
Zarówno implementacja, jak LinkedHashMap
i HashMap
implementacja Map
interfejsu. Są jednak między nimi pewne różnice.
LinkedHashMap
utrzymuje wewnętrznie podwójnie połączoną listę. Dzięki temu zachowuje kolejność wstawiania swoich elementów.LinkedHashMap
Klasa wymaga więcej pamięci niżHashMap
. Dzieje się tak, ponieważLinkedHashMap
wewnętrznie utrzymuje połączone listy.- Wydajność
LinkedHashMap
jest wolniejsza niżHashMap
.