Java LinkedHashMap

W tym samouczku dowiemy się o klasie Java LinkedHashMap i jej działaniu na przykładach.

LinkedHashMapKlasa zbiorów ramach Java dostarcza tabeli mieszania i połączone wdrażanie listy interfejsu mapy.

LinkedHashMapInterfejs 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.LinkedHashMappakiet. 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 : LinkedHashMapKlasa 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 truezostanie 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

LinkedHashMapKlasa 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 mapy
  • putAll() - wstawia wszystkie wpisy z określonej mapy do tej mapy
  • putIfAbsent() - 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ść mapy
  • keySet() - zwraca zestaw wszystkich kluczy mapy
  • values() - 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 returns null.
  • 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 map
  • remove(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 LinkedHashMapi HashMapimplementacja Mapinterfejsu. Są jednak między nimi pewne różnice.

  • LinkedHashMaputrzymuje wewnętrznie podwójnie połączoną listę. Dzięki temu zachowuje kolejność wstawiania swoich elementów.
  • LinkedHashMapKlasa wymaga więcej pamięci niż HashMap. Dzieje się tak, ponieważ LinkedHashMapwewnętrznie utrzymuje połączone listy.
  • Wydajność LinkedHashMapjest wolniejsza niż HashMap.

Interesujące artykuły...