Java LinkedHashMap

V tomto tutoriále sa pomocou príkladov dozvieme o triede Java LinkedHashMap a jej operáciách.

LinkedHashMapTrieda zbierok rámca Java poskytuje hash tabuľky a prepojené realizácia zoznamu rozhrania mapy.

LinkedHashMapRozhranie rozširuje triedu HashMap uchovávať svoje záznamy v tabuľke hash. Vnútorne udržiava zoznam všetkých prepojených položiek, ktorý je dvakrát prepojený, aby si mohol svoje záznamy objednať.

Vytvára sa mapa LinkedHashMap

Aby sme vytvorili prepojenú hashmapu, musíme najskôr importovať java.util.LinkedHashMapbalík. Po importovaní balíka tu môžeme vytvoriť prepojené hashmapy v Jave.

 // LinkedHashMap with initial capacity 8 and load factor 0.6 LinkedHashMap numbers = new LinkedHashMap(8, 0.6f); 

Vo vyššie uvedenom kóde sme vytvorili prepojenú hashmapu pomenovanú čísla.

Tu,

  • Kľúč - jedinečný identifikátor, ktorý sa používa na priradenie každého prvku (hodnoty) k mape
  • Hodnota - prvky spojené s klávesmi na mape

Všimnite si časť new LinkedHashMap(8, 0.6). Tu je prvým parametrom kapacita a druhým parametrom je loadFactor .

  • kapacita - kapacita tohto prepojeného hashmapu je 8. To znamená, že môže uložiť 8 záznamov.
  • loadFactor - Faktor zaťaženia tohto prepojeného hashmapu je 0,6. To znamená, že kedykoľvek je naša hašovacia mapa naplnená o 60%, položky sa presunú do novej hashovacej tabuľky s dvojnásobnou veľkosťou ako pôvodná hash tabuľka.

Predvolená kapacita a faktor zaťaženia

Je možné vytvoriť prepojený hashmap bez definovania jeho kapacity a koeficientu zaťaženia. Napríklad,

 //LinkedHashMap with default capacity and load factor LinkedHashMap numbers1 = new LinkedHashMap(); 

Predvolene,

  • kapacita prepojenej hashmapy bude 16
  • činiteľ zaťaženia bude 0,75

Poznámka : LinkedHashMapTrieda nám tiež umožňuje definovať poradie jej položiek. Napríklad

 // LinkedHashMap with specified order LinkedHashMap numbers2 = new LinkedHashMap(capacity, loadFactor, accessOrder); 

V tomto prípade je accessOrder boolovská hodnota. Jeho predvolená hodnota je false. V takom prípade sú položky v prepojenej hashmape zoradené na základe ich objednávky vloženia.

Ak truesa však odovzdá ako accessOrder, položky v prepojenej hashmape sa zoradia od najmenej nedávno sprístupnených po naposledy sprístupnené.

Vytváranie LinkedHashMap z iných máp

Týmto spôsobom môžeme vytvoriť prepojenú hashmapu obsahujúcu všetky prvky ostatných máp.

 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); ) ) 

Výkon

 LinkedHashMap1: (dva = 2, štyri = 4) LinkedHashMap2: (dva = 2, štyri = 4, tri = 3) 

Metódy LinkedHashMap

LinkedHashMapTrieda poskytuje metódy, ktoré nám umožnia vykonávať rôzne operácie na mape.

Vložiť prvky do LinkedHashMap

  • put() - vloží zadané mapovanie kľúča / hodnoty do mapy
  • putAll() - vloží všetky záznamy zo zadanej mapy na túto mapu
  • putIfAbsent() - vloží zadané mapovanie kľúča / hodnoty do mapy, ak sa uvedený kľúč na mape nenachádza

Napríklad,

  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); ) ) 

Výkon

 Pôvodná LinkedHashMap: (dve = 2, štyri = 4) Aktualizovaná LinkedHashMap: (dve = 2, štyri = 4, šesť = 6) Nová LinkedHashMap: (jedna = 1, dve = 2, štyri = 4, šesť = 6) 

Prístup k prvkom LinkedHashMap

1. Pomocou položiek entrySet (), keySet () a values ​​()

  • entrySet() - vráti množinu všetkých mapovaní kľúčov / hodnôt mapy
  • keySet() - vráti sadu všetkých kľúčov mapy
  • values() - vráti množinu všetkých hodnôt mapy

Napríklad,

 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()); ) ) 

Výkon

 LinkedHashMap: (Jeden = 1, Dva = 2, Tri = 3) Mapovanie kľúča / hodnoty: (Jeden = 1, Dva = 2, Tri = 3) Kľúče: (Jeden, Dva, Tri) Hodnoty: (1, 2, 3 ) 

2. Používanie get () a getOrDefault ()

  • get()- Vráti hodnotu spojenú so zadaným kľúčom. Ak kľúč nenájdete, vráti sa null.
  • getOrDefault()- Vráti hodnotu spojenú so zadaným kľúčom. Ak kľúč nenájdete, vráti zadanú predvolenú hodnotu.

Napríklad,

 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); ) ) 

Výkon

 LinkedHashMap: (Jeden = 1, Dva = 2, Tri = 3) Vrátené číslo: 3 Vrátené číslo: 5 

Odstránené prvky LinkedHashMap

  • remove(key) - vráti a odstráni z mapy položku spojenú so zadaným kľúčom
  • remove(key, value) - odstráni položku z mapy, iba ak je uvedený kľúč namapovaný na zadanú hodnotu a vráti boolovskú hodnotu

Napríklad,

 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); ) ) 

Výkon

LinkedHashMap: (Jeden = 1, Dva = 2, Tri = 3) Odstránená hodnota: 2 Je položka (Tri = 3) odstránená? Skutočne aktualizovaná mapa LinkedHashMap: (jedna = 1)

Ďalšie metódy LinkedHashMap

Metóda Popis
clear() odstráni všetky záznamy z mapy
containsKey() skontroluje, či mapa obsahuje zadaný kľúč, a vráti boolovskú hodnotu
containsValue() skontroluje, či mapa obsahuje zadanú hodnotu, a vráti boolovskú hodnotu
size() vráti veľkosť mapy
isEmpty() skontroluje, či je mapa prázdna, a vráti boolovskú hodnotu

LinkedHashMap vs. HashMap

Obe LinkedHashMapa HashMapimplementuje Maprozhranie. Existujú však určité rozdiely medzi nimi.

  • LinkedHashMapinterne vedie zoznam s dvojnásobným prepojením. Z tohto dôvodu zachováva poradie vkladania svojich prvkov.
  • LinkedHashMapTrieda vyžaduje viac úložného priestoru, než HashMap. Je to tak preto, lebo LinkedHashMapinterne udržuje prepojené zoznamy.
  • Výkon LinkedHashMapje pomalší ako HashMap.

Zaujímavé články...