In diesem Tutorial lernen wir anhand von Beispielen die Java LinkedHashMap-Klasse und ihre Operationen kennen.
Die LinkedHashMap
Klasse des Java-Sammlungsframeworks stellt die Implementierung der Hash-Tabelle und der verknüpften Liste der Map-Schnittstelle bereit.
Die LinkedHashMap
Schnittstelle 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.LinkedHashMap
zuerst 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 LinkedHashMap
Klasse 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 true
jedoch 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 LinkedHashMap
Klasse 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 einputAll()
- fügt alle Einträge aus der angegebenen Karte in diese Karte einputIfAbsent()
- 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ückkeySet()
- gibt einen Satz aller Schlüssel der Karte zurückvalues()
- 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 returnsnull
.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 mapremove(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 LinkedHashMap
als auch das HashMap
implementiert die Map
Schnittstelle. Es gibt jedoch einige Unterschiede zwischen ihnen.
LinkedHashMap
führt intern eine doppelt verknüpfte Liste. Aus diesem Grund behält es die Einfügereihenfolge seiner Elemente bei.- Die
LinkedHashMap
Klasse benötigt mehr Speicher alsHashMap
. Dies liegt daran,LinkedHashMap
dass verknüpfte Listen intern verwaltet werden. - Die Leistung von
LinkedHashMap
ist langsamer alsHashMap
.