Java LinkedHashMap
Java LinkedHashMap
In deze zelfstudie leren we over de Java LinkedHashMap-klasse en zijn bewerkingen met behulp van voorbeelden.
De LinkedHashMap
klasse van het Java-verzamelingsframework biedt de hash-tabel en gekoppelde lijstimplementatie van de kaartinterface.
De LinkedHashMap
interface breidt de HashMap-klasse uit om de vermeldingen in een hash-tabel op te slaan. Het houdt intern een dubbel gekoppelde lijst bij van al zijn inzendingen om zijn inzendingen te bestellen.
Een LinkedHashMap maken
Om een gekoppelde hashmap te maken, moeten we de java.util.LinkedHashMap
. importeren pakket eerst. Zodra we het pakket hebben geïmporteerd, kunnen we als volgt gekoppelde hashmaps maken in Java.
// LinkedHashMap with initial capacity 8 and load factor 0.6
LinkedHashMap<Key, Value> 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 toetsen 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 kunnen worden opgeslagen.
- loadFactor - De belastingsfactor van deze gekoppelde hashmap is 0,6. Dit betekent dat wanneer onze hash-kaart voor 60% is gevuld, de items worden verplaatst naar een nieuwe hash-tabel van het dubbele van de oorspronkelijke hash-tabel.
Standaardcapaciteit 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<Key, Value> numbers1 = new LinkedHashMap<>();
Standaard,
- de capaciteit van de gekoppelde hashmap is 16
- de belastingsfactor zal 0,75 zijn
Opmerking :De LinkedHashMap
class stelt ons ook in staat om de volgorde van de items te definiëren. Bijvoorbeeld
// LinkedHashMap with specified order
LinkedHashMap<Key, Value> numbers2 = new LinkedHashMap<>(capacity, loadFactor, accessOrder);
Hier, accessOrder is een booleaanse waarde. De standaardwaarde is false
. In dit geval worden items in de gekoppelde hashmap geordend op basis van hun invoegvolgorde.
Als echter true
wordt doorgegeven als accessOrder , worden items in de gekoppelde hashmap gerangschikt van minst recentelijk geopend naar meest recentelijk 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<String, Integer> evenNumbers = new LinkedHashMap<>();
evenNumbers.put("Two", 2);
evenNumbers.put("Four", 4);
System.out.println("LinkedHashMap1: " + evenNumbers);
// Creating a LinkedHashMap from other LinkedHashMap
LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>(evenNumbers);
numbers.put("Three", 3);
System.out.println("LinkedHashMap2: " + numbers);
}
}
Uitvoer
LinkedHashMap1: {Two=2, Four=4} LinkedHashMap2: {Two=2, Four=4, Three=3}
Methoden van LinkedHashMap
De LinkedHashMap
class biedt methoden waarmee we verschillende bewerkingen op de kaart kunnen uitvoeren.
Elementen invoegen in 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 gespecificeerde sleutel/waarde-toewijzing toe aan de kaart als de gespecificeerde sleutel niet aanwezig is in de kaart
Bijvoorbeeld,
import java.util.LinkedHashMap;
class Main {
public static void main(String[] args) {
// Creating LinkedHashMap of even numbers
LinkedHashMap<String, Integer> 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<String, Integer> numbers = new LinkedHashMap<>();
numbers.put("One", 1);
// Using putAll()
numbers.putAll(evenNumbers);
System.out.println("New LinkedHashMap: " + numbers);
}
}
Uitvoer
Original LinkedHashMap: {Two=2, Four=4} Updated LinkedHashMap: {Two=2, Four=4, Six=6} New LinkedHashMap: {One=1, Two=2, Four=4, Six=6}
Toegang tot LinkedHashMap-elementen
entrySet()
- retourneert een set 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<String, Integer> 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} Key/Value mappings: [One=1, Two=2, Three=3] Keys: [One, Two, Three] Values: [1, 2, 3]
get()
- Retourneert de waarde die is gekoppeld aan de opgegeven sleutel. Als de sleutel niet wordt gevonden, retourneert dezenull
.getOrDefault()
- Retourneert de waarde die is gekoppeld aan de opgegeven sleutel. Als de sleutel niet wordt gevonden, wordt de opgegeven standaardwaarde geretourneerd.
Bijvoorbeeld,
import java.util.LinkedHashMap;
class Main {
public static void main(String[] args) {
LinkedHashMap<String, Integer> 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} Returned Number: 3 Returned Number: 5
LinkedHashMap-elementen verwijderd
remove(key)
- retourneert en verwijdert de invoer die is gekoppeld aan de opgegeven sleutel van de kaartremove(key, value)
- verwijdert het item alleen van de kaart als de opgegeven sleutel toegewezen aan de opgegeven waarde en retourneer een booleaanse waarde
Bijvoorbeeld,
import java.util.LinkedHashMap;
class Main {
public static void main(String[] args) {
LinkedHashMap<String, Integer> 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} Removed value: 2 Is the entry {Three=3} removed? True Updated LinkedHashMap: {One=1}
Andere methoden van LinkedHashMap
Methode | Beschrijving |
---|---|
clear() | verwijdert alle vermeldingen van de kaart |
containsKey() | controleert of de kaart de gespecificeerde sleutel bevat en geeft een booleaanse waarde terug |
containsValue() | controleert of de kaart de gespecificeerde waarde bevat en geeft een booleaanse waarde terug |
size() | geeft de grootte van de kaart terug |
isEmpty() | controleert of de kaart leeg is en geeft een booleaanse waarde terug |
LinkedHashMap Vs. HashMap
Zowel de LinkedHashMap
en de HashMap
implementeert de Map
koppel. Er bestaan echter enkele verschillen tussen hen.
LinkedHashMap
houdt intern een dubbel gelinkte lijst bij. Hierdoor behoudt het de invoegvolgorde van zijn elementen.- De
LinkedHashMap
klasse vereist meer opslagruimte danHashMap
. Dit komt omdatLinkedHashMap
onderhoudt intern gekoppelde lijsten. - De prestaties van
LinkedHashMap
is langzamer danHashMap
.
Java