In deze zelfstudie leren we met behulp van voorbeelden meer over de Java LinkedHashMap-klasse en de bewerkingen ervan.
De LinkedHashMap
klasse van het Java-verzamelingsraamwerk biedt de hashtabel en de implementatie van gekoppelde lijsten van de kaartinterface.
De LinkedHashMap
interface breidt de klasse HashMap uit om de vermeldingen in een hashtabel op te slaan. Het houdt intern een dubbel gekoppelde lijst bij tussen al zijn inzendingen om de inzendingen te ordenen.
Een LinkedHashMap maken
Om een gekoppelde hashmap te maken, moeten we het java.util.LinkedHashMap
pakket eerst importeren . Zodra we het pakket hebben geïmporteerd, kunnen we als volgt gekoppelde hashmaps in Java maken.
// LinkedHashMap with initial capacity 8 and load factor 0.6 LinkedHashMap numbers = new LinkedHashMap(8, 0.6f);
In de bovenstaande code hebben we een gekoppelde hashmap gemaakt met de naam nummers.
Hier,
- Sleutel - een unieke identificatie die wordt gebruikt om elk element (waarde) in een kaart te associëren
- Waarde - elementen die zijn gekoppeld aan de sleutels in een kaart
Let op het onderdeel new LinkedHashMap(8, 0.6)
. Hier is de eerste parameter capaciteit en de tweede parameter is loadFactor .
- capaciteit - De capaciteit van deze gekoppelde hashmap is 8. Dit betekent dat er 8 items in kunnen worden opgeslagen.
- loadFactor - De belastingsfactor van deze gekoppelde hashmap is 0,6. Dit betekent dat wanneer onze hash-map voor 60% is gevuld, de items worden verplaatst naar een nieuwe hashtabel die dubbel zo groot is als de originele hash-tabel.
Standaard capaciteit en belastingsfactor
Het is mogelijk om een gekoppelde hashmap te maken zonder de capaciteit en belastingsfactor te definiëren. Bijvoorbeeld,
//LinkedHashMap with default capacity and load factor LinkedHashMap numbers1 = new LinkedHashMap();
Standaard,
- de capaciteit van de gekoppelde hashmap is 16
- de belastingsfactor zal 0,75 zijn
Opmerking : de LinkedHashMap
klasse stelt ons ook in staat om de volgorde van de items te definiëren. Bijvoorbeeld
// LinkedHashMap with specified order LinkedHashMap numbers2 = new LinkedHashMap(capacity, loadFactor, accessOrder);
Hier is accessOrder een booleaanse waarde. De standaardwaarde is false
. In dit geval worden vermeldingen in de gekoppelde hashmap gerangschikt op basis van hun invoegvolgorde.
Als het echter true
wordt doorgegeven als accessOrder, worden vermeldingen in de gekoppelde hashmap gerangschikt van minst recent geopend tot meest recent geopend.
LinkedHashMap maken van andere kaarten
Hier is hoe we een gekoppelde hashmap kunnen maken die alle elementen van andere kaarten bevat.
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); ) )
Uitvoer
LinkedHashMap1: (Twee = 2, Vier = 4) LinkedHashMap2: (Twee = 2, Vier = 4, Drie = 3)
Methoden van LinkedHashMap
De LinkedHashMap
klasse biedt methoden waarmee we verschillende bewerkingen op de kaart kunnen uitvoeren.
Voeg elementen toe aan LinkedHashMap
put()
- voegt de opgegeven sleutel / waarde-toewijzing in op de kaartputAll()
- voegt alle vermeldingen van de opgegeven kaart in op deze kaartputIfAbsent()
- voegt de opgegeven sleutel / waarde-toewijzing in op de kaart als de opgegeven sleutel niet aanwezig is op de kaart
Bijvoorbeeld,
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); ) )
Uitvoer
Originele LinkedHashMap: (Twee = 2, Vier = 4) Bijgewerkte LinkedHashMap: (Twee = 2, Vier = 4, Zes = 6) Nieuwe LinkedHashMap: (Een = 1, Twee = 2, Vier = 4, Zes = 6)
Toegang tot LinkedHashMap-elementen
1. entrySet (), keySet () en values () gebruiken
entrySet()
- geeft een set terug van alle sleutel / waarde-toewijzingen van de kaartkeySet()
- geeft een set van alle sleutels van de kaart terugvalues()
- geeft een set van alle waarden van de kaart terug
Bijvoorbeeld,
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()); ) )
Uitvoer
LinkedHashMap: (One = 1, Two = 2, Three = 3) Sleutel- / waardetoewijzingen: (One = 1, Two = 2, Three = 3) Keys: (One, Two, Three) Waarden: (1, 2, 3 )
2. Get () en getOrDefault () gebruiken
get()
- Retourneert de waarde die is gekoppeld aan de opgegeven sleutel. Als de sleutel niet wordt gevonden, keert deze terugnull
.getOrDefault()
- Retourneert de waarde die is gekoppeld aan de opgegeven sleutel. Als de sleutel niet wordt gevonden, retourneert deze de opgegeven standaardwaarde.
Bijvoorbeeld,
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); ) )
Uitvoer
LinkedHashMap: (One = 1, Two = 2, Three = 3) Geretourneerd nummer: 3 Geretourneerd nummer: 5
LinkedHashMap-elementen verwijderd
remove(key)
- retourneert en verwijdert het item dat is gekoppeld aan de opgegeven sleutel van de kaartremove(key, value)
- verwijdert het item alleen van de kaart als de opgegeven sleutel is toegewezen aan de opgegeven waarde en retourneert een booleaanse waarde
Bijvoorbeeld,
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); ) )
Uitvoer
LinkedHashMap: (One = 1, Two = 2, Three = 3) Waarde verwijderd: 2 Is de vermelding (Three = 3) verwijderd? Echte bijgewerkte LinkedHashMap: (One = 1)
Andere methoden van LinkedHashMap
Methode | Omschrijving |
---|---|
clear() | verwijdert alle vermeldingen van de kaart |
containsKey() | controleert of de kaart de opgegeven sleutel bevat en retourneert een booleaanse waarde |
containsValue() | controleert of de kaart de opgegeven waarde bevat en retourneert een booleaanse waarde |
size() | geeft de grootte van de kaart terug |
isEmpty() | controleert of de kaart leeg is en retourneert een booleaanse waarde |
LinkedHashMap Vs. Hash kaart
Zowel de LinkedHashMap
als de HashMap
implementeert de Map
interface. Er zijn echter enkele verschillen tussen beide.
LinkedHashMap
houdt intern een dubbel gelinkte lijst bij. Hierdoor behoudt het de invoegvolgorde van zijn elementen.- De
LinkedHashMap
klas heeft meer opslagruimte nodig danHashMap
. Dit komt doordatLinkedHashMap
intern gekoppelde lijsten bijhoudt. - De prestaties van
LinkedHashMap
zijn langzamer danHashMap
.