V tomto kurzu se pomocí příkladů dozvíme o třídě Java LinkedHashMap a jejích operacích.
LinkedHashMap
Třída sbírek rámce Java poskytuje hash tabulky a propojené realizace seznamu rozhraní mapy.
LinkedHashMap
Rozhraní rozšiřuje třídu HashMap uchovávat své záznamy v tabulce hash. Interně udržuje seznam všech odkazů dvakrát spojený, aby si mohl své položky objednat.
Vytvoření LinkedHashMap
Aby bylo možné vytvořit propojenou hashmapu, musíme java.util.LinkedHashMap
nejprve importovat balíček. Jakmile naimportujeme balíček, můžeme v Java vytvořit propojené hashmapy.
// LinkedHashMap with initial capacity 8 and load factor 0.6 LinkedHashMap numbers = new LinkedHashMap(8, 0.6f);
Ve výše uvedeném kódu jsme vytvořili propojenou hashmapu pojmenovaná čísla.
Tady,
- Klíč - jedinečný identifikátor používaný k přidružení každého prvku (hodnoty) na mapě
- Hodnota - prvky spojené s klíči na mapě
Všimněte si části new LinkedHashMap(8, 0.6)
. Zde je prvním parametrem kapacita a druhým parametrem je loadFactor .
- kapacita - kapacita tohoto propojeného hashmapu je 8. To znamená, že může uložit 8 záznamů.
- loadFactor - Faktor zatížení tohoto propojeného hashmapu je 0,6. To znamená, že kdykoli je naše hash mapa naplněna o 60%, položky se přesouvají do nové hash tabulky s dvojnásobnou velikostí původní hash tabulky.
Výchozí kapacita a faktor zatížení
Je možné vytvořit propojený hashmap bez definování jeho kapacity a faktoru zatížení. Například,
//LinkedHashMap with default capacity and load factor LinkedHashMap numbers1 = new LinkedHashMap();
Ve výchozím stavu,
- kapacita propojené hashmapy bude 16
- činitel zatížení bude 0,75
Poznámka : LinkedHashMap
Třída nám také umožňuje definovat pořadí jejích záznamů. Například
// LinkedHashMap with specified order LinkedHashMap numbers2 = new LinkedHashMap(capacity, loadFactor, accessOrder);
Zde je accessOrder logická hodnota. Jeho výchozí hodnota je false
. V tomto případě jsou položky v propojené hashmapě řazeny na základě jejich objednávky.
Pokud true
je však předán jako accessOrder, položky v propojené hashmapě budou uspořádány od nejméně nedávno přistupujícího k nejvíce nedávno přistupovanému.
Vytváření LinkedHashMap z jiných map
Zde můžeme vytvořit propojenou hashmapu obsahující všechny prvky jiných 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); ) )
Výstup
LinkedHashMap1: (dva = 2, čtyři = 4) LinkedHashMap2: (dva = 2, čtyři = 4, tři = 3)
Metody LinkedHashMap
LinkedHashMap
Třída poskytuje metody, které nám umožní provádět různé operace na mapě.
Vložit prvky do LinkedHashMap
put()
- vloží zadané mapování klíče / hodnoty do mapyputAll()
- vloží všechny položky ze zadané mapy na tuto mapuputIfAbsent()
- vloží mapování určeného klíče / hodnoty do mapy, pokud zadaný klíč na mapě není
Napří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ýstup
Původní LinkedHashMap: (dva = 2, čtyři = 4) Aktualizovaná LinkedHashMap: (dva = 2, čtyři = 4, šest = 6) Nová LinkedHashMap: (jeden = 1, dva = 2, čtyři = 4, šest = 6)
Přístup k prvkům LinkedHashMap
1. Pomocí entrySet (), keySet () a hodnot ()
entrySet()
- vrátí sadu všech mapování klíčů / hodnot mapykeySet()
- vrátí sadu všech klíčů mapyvalues()
- vrací sadu všech hodnot mapy
Napří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ýstup
LinkedHashMap: (One = 1, Two = 2, Three = 3) Mapování klíčů / hodnot: (One = 1, Two = 2, Three = 3) Klávesy: (One, Two, Three) Hodnoty: (1, 2, 3 )
2. Používání get () a getOrDefault ()
get()
- Vrátí hodnotu spojenou se zadaným klíčem. Pokud klíč nebyl nalezen, vrátí senull
.getOrDefault()
- Vrátí hodnotu spojenou se zadaným klíčem. Pokud klíč nebyl nalezen, vrátí zadanou výchozí hodnotu.
Napří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ýstup
LinkedHashMap: (Jeden = 1, Dva = 2, Tři = 3) Vrácené číslo: 3 Vrácené číslo: 5
Odstraněny prvky LinkedHashMap
remove(key)
- vrátí a odebere z mapy položku spojenou se zadaným klíčemremove(key, value)
- odstraní položku z mapy pouze v případě, že zadaný klíč byl namapován na zadanou hodnotu a vrátí logickou hodnotu
Napří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ýstup
LinkedHashMap: (Jeden = 1, Dva = 2, Tři = 3) Odstraněná hodnota: 2 Je položka (Tři = 3) odstraněna? Pravda aktualizovaná LinkedHashMap: (jedna = 1)
Další metody LinkedHashMap
Metoda | Popis |
---|---|
clear() | odstraní všechny položky z mapy |
containsKey() | zkontroluje, zda mapa obsahuje zadaný klíč a vrátí logickou hodnotu |
containsValue() | zkontroluje, zda mapa obsahuje zadanou hodnotu a vrátí logickou hodnotu |
size() | vrací velikost mapy |
isEmpty() | zkontroluje, zda je mapa prázdná, a vrátí logickou hodnotu |
LinkedHashMap vs. HashMap
Obě LinkedHashMap
a HashMap
implementuje Map
rozhraní. Existují však mezi nimi určité rozdíly.
LinkedHashMap
udržuje interně dvojitě propojený seznam. Z tohoto důvodu udržuje pořadí vkládání svých prvků.LinkedHashMap
Třída vyžaduje více úložného prostoru, nežHashMap
. Je to proto, žeLinkedHashMap
interně udržuje propojené seznamy.- Výkon
LinkedHashMap
je pomalejší nežHashMap
.