Java LinkedHashMap

In deze zelfstudie leren we met behulp van voorbeelden meer over de Java LinkedHashMap-klasse en de bewerkingen ervan.

De LinkedHashMapklasse van het Java-verzamelingsraamwerk biedt de hashtabel en de implementatie van gekoppelde lijsten van de kaartinterface.

De LinkedHashMapinterface 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.LinkedHashMappakket 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 LinkedHashMapklasse 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 truewordt 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 LinkedHashMapklasse 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 kaart
  • putAll() - voegt alle vermeldingen van de opgegeven kaart in op deze kaart
  • putIfAbsent() - 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 kaart
  • keySet() - geeft een set van alle sleutels van de kaart terug
  • values() - 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 terug null.
  • 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 kaart
  • remove(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 LinkedHashMapals de HashMapimplementeert de Mapinterface. Er zijn echter enkele verschillen tussen beide.

  • LinkedHashMaphoudt intern een dubbel gelinkte lijst bij. Hierdoor behoudt het de invoegvolgorde van zijn elementen.
  • De LinkedHashMapklas heeft meer opslagruimte nodig dan HashMap. Dit komt doordat LinkedHashMapintern gekoppelde lijsten bijhoudt.
  • De prestaties van LinkedHashMapzijn langzamer dan HashMap.

Interessante artikelen...