Java LinkedHashMap

In diesem Tutorial lernen wir anhand von Beispielen die Java LinkedHashMap-Klasse und ihre Operationen kennen.

Die LinkedHashMapKlasse des Java-Sammlungsframeworks stellt die Implementierung der Hash-Tabelle und der verknüpften Liste der Map-Schnittstelle bereit.

Die LinkedHashMapSchnittstelle erweitert die HashMap-Klasse, um ihre Einträge in einer Hash-Tabelle zu speichern. Es führt intern eine doppelt verknüpfte Liste unter allen Einträgen, um seine Einträge zu ordnen.

Erstellen einer LinkedHashMap

Um eine verknüpfte Hashmap zu erstellen, müssen wir java.util.LinkedHashMapzuerst das Paket importieren . Sobald wir das Paket importiert haben, können wir hier verknüpfte Hashmaps in Java erstellen.

 // LinkedHashMap with initial capacity 8 and load factor 0.6 LinkedHashMap numbers = new LinkedHashMap(8, 0.6f); 

Im obigen Code haben wir eine verknüpfte Hashmap mit dem Namen "Nummern" erstellt.

Hier,

  • Schlüssel - eine eindeutige Kennung, mit der jedes Element (Wert) in einer Karte zugeordnet wird
  • Wert - Elemente, die den Schlüsseln in einer Karte zugeordnet sind

Beachten Sie das Teil new LinkedHashMap(8, 0.6). Hier ist der erste Parameter die Kapazität und der zweite Parameter loadFactor .

  • Kapazität - Die Kapazität dieser verknüpften Hashmap beträgt 8. Das bedeutet, dass 8 Einträge gespeichert werden können.
  • loadFactor - Der Lastfaktor dieser verknüpften Hashmap beträgt 0,6. Das heißt, wenn unsere Hash-Map zu 60% gefüllt ist, werden die Einträge in eine neue Hash-Tabelle verschoben, die doppelt so groß ist wie die ursprüngliche Hash-Tabelle.

Standardkapazität und Lastfaktor

Es ist möglich, eine verknüpfte Hashmap zu erstellen, ohne deren Kapazität und Auslastungsfaktor zu definieren. Beispielsweise,

 //LinkedHashMap with default capacity and load factor LinkedHashMap numbers1 = new LinkedHashMap(); 

Standardmäßig,

  • Die Kapazität der verknüpften Hashmap beträgt 16
  • Der Lastfaktor beträgt 0,75

Hinweis : Mit der LinkedHashMapKlasse können wir auch die Reihenfolge ihrer Einträge definieren. Beispielsweise

 // LinkedHashMap with specified order LinkedHashMap numbers2 = new LinkedHashMap(capacity, loadFactor, accessOrder); 

Hier ist accessOrder ein boolescher Wert. Der Standardwert ist false. In diesem Fall werden Einträge in der verknüpften Hashmap anhand ihrer Einfügereihenfolge sortiert.

Wenn truejedoch als accessOrder übergeben wird, werden die Einträge in der verknüpften Hashmap vom zuletzt aufgerufenen zum zuletzt aufgerufenen sortiert.

Erstellen von LinkedHashMap aus anderen Karten

So können wir eine verknüpfte Hashmap erstellen, die alle Elemente anderer Karten enthält.

 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); ) ) 

Ausgabe

 LinkedHashMap1: (Zwei = 2, Vier = 4) LinkedHashMap2: (Zwei = 2, Vier = 4, Drei = 3) 

Methoden von LinkedHashMap

Die LinkedHashMapKlasse bietet Methoden, mit denen wir verschiedene Operationen auf der Karte ausführen können.

Elemente in LinkedHashMap einfügen

  • put() - fügt die angegebene Schlüssel- / Wertzuordnung in die Zuordnung ein
  • putAll() - fügt alle Einträge aus der angegebenen Karte in diese Karte ein
  • putIfAbsent() - fügt die angegebene Schlüssel- / Wertzuordnung in die Karte ein, wenn der angegebene Schlüssel nicht in der Karte vorhanden ist

Beispielsweise,

  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); ) ) 

Ausgabe

 Ursprüngliche LinkedHashMap: (Zwei = 2, Vier = 4) Aktualisierte LinkedHashMap: (Zwei = 2, Vier = 4, Sechs = 6) Neue LinkedHashMap: (Eins = 1, Zwei = 2, Vier = 4, Sechs = 6) 

Greifen Sie auf LinkedHashMap-Elemente zu

1. Verwenden Sie entrySet (), keySet () und values ​​()

  • entrySet() - gibt einen Satz aller Schlüssel- / Wertzuordnungen der Karte zurück
  • keySet() - gibt einen Satz aller Schlüssel der Karte zurück
  • values() - gibt einen Satz aller Werte der Karte zurück

Beispielsweise,

 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()); ) ) 

Ausgabe

 LinkedHashMap: (One=1, Two=2, Three=3) Key/Value mappings: (One=1, Two=2, Three=3) Keys: (One, Two, Three) Values: (1, 2, 3) 

2. Using get() and getOrDefault()

  • get() - Returns the value associated with the specified key. If the key is not found, it returns null.
  • getOrDefault() - Returns the value associated with the specified key. If the key is not found, it returns the specified default value.

For example,

 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); ) ) 

Output

 LinkedHashMap: (One=1, Two=2, Three=3) Returned Number: 3 Returned Number: 5 

Removed LinkedHashMap Elements

  • remove(key) - returns and removes the entry associated with the specified key from the map
  • remove(key, value) - removes the entry from the map only if the specified key mapped to be the specified value and return a boolean value

For example,

 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); ) ) 

Output

 LinkedHashMap: (One=1, Two=2, Three=3) Removed value: 2 Is the entry (Three=3) removed? True Updated LinkedHashMap: (One=1) 

Andere Methoden von LinkedHashMap

Methode Beschreibung
clear() Entfernt alle Einträge von der Karte
containsKey() prüft, ob die Map den angegebenen Schlüssel enthält und gibt einen booleschen Wert zurück
containsValue() prüft, ob die Map den angegebenen Wert enthält und gibt einen booleschen Wert zurück
size() Gibt die Größe der Karte zurück
isEmpty() prüft, ob die Map leer ist und gibt einen booleschen Wert zurück

LinkedHashMap Vs. HashMap

Sowohl das LinkedHashMapals auch das HashMapimplementiert die MapSchnittstelle. Es gibt jedoch einige Unterschiede zwischen ihnen.

  • LinkedHashMapführt intern eine doppelt verknüpfte Liste. Aus diesem Grund behält es die Einfügereihenfolge seiner Elemente bei.
  • Die LinkedHashMapKlasse benötigt mehr Speicher als HashMap. Dies liegt daran, LinkedHashMapdass verknüpfte Listen intern verwaltet werden.
  • Die Leistung von LinkedHashMapist langsamer als HashMap.

Interessante Beiträge...