V tomto tutoriále sa pomocou príkladov dozvieme o triede Java LinkedHashMap a jej operáciách.
LinkedHashMap
Trieda zbierok rámca Java poskytuje hash tabuľky a prepojené realizácia zoznamu rozhrania mapy.
LinkedHashMap
Rozhranie 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.LinkedHashMap
balí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 : LinkedHashMap
Trieda 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 true
sa 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
LinkedHashMap
Trieda 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 mapyputAll()
- vloží všetky záznamy zo zadanej mapy na túto mapuputIfAbsent()
- 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 mapykeySet()
- vráti sadu všetkých kľúčov mapyvalues()
- 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 sanull
.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ľúčomremove(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 LinkedHashMap
a HashMap
implementuje Map
rozhranie. Existujú však určité rozdiely medzi nimi.
LinkedHashMap
interne vedie zoznam s dvojnásobným prepojením. Z tohto dôvodu zachováva poradie vkladania svojich prvkov.LinkedHashMap
Trieda vyžaduje viac úložného priestoru, nežHashMap
. Je to tak preto, leboLinkedHashMap
interne udržuje prepojené zoznamy.- Výkon
LinkedHashMap
je pomalší akoHashMap
.