English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在本教程中,我们将借助示例学习Java LinkedHashMap类及其操作。
Java集合框架的LinkedHashMap类提供了Map接口的哈希表和链表实现。
LinkedHashMap继承了HashMap类,以将其条目存储在哈希表中。它在内部在所有条目之间维护一个双链列表,以对条目进行排序。
为了创建双向链表,我们必须先导入java.util.LinkedHashMap包。导入程序包后,可以使用以下方法在Java中创建双向链表。
//LinkedHashMap的初始容量为8,载入因子为0.6 LinkedHashMap<Key, Value> numbers = new LinkedHashMap<>();8, 0.6f);
Im obigen Code haben wir einen namens numbers LinkedHashMap erstellt.
Hier,
Schlüssel - Ein einzigartiger Identifikator, der verwendet wird, um jedes Element (Wert) im Map zu verknüpfen
Value - Elemente, die mit den Schlüsseln im Map verknüpft sind
Hinweis new LinkedHashMap<>(8, 0.6) Dies ist ein Abschnitt. Hier sind die ersten Parameter capacity und loadFactor.
capacity - Die Kapazität dieser doppelten Liste beträgt8. Dies bedeutet, dass es speichern kann8Einträge.
loadFactor- Der Lastfaktor dieser doppelten Liste beträgt 0.6. Dies bedeutet, dass jedes Mal, wenn der Hash-Map vollständig ist60% werden die Einträge in einen neuen Hash-Table verschoben, deren Größe doppelt so groß ist wie die ursprüngliche Hash-Table.
Standardkapazität und Lastfaktor
Es ist nicht erforderlich, die Kapazität und den Lastfaktor zu definieren, um eine doppelte Liste zu erstellen. Zum Beispiel
//LinkedHashMap mit Standardkapazität und Lastfaktor LinkedHashMap<Key, Value> numbers1 = new LinkedHashMap<>();
Standardmäßig
Die Kapazität der doppelten Liste beträgt 16
Der Lastfaktor beträgt 0.75
HinweisDie Klasse LinkedHashMap ermöglicht es uns auch, die Reihenfolge der Einträge zu definieren. Zum Beispiel
//LinkedHashMap mit spezifischer Reihenfolge LinkedHashMap<Key, Value> numbers2 = new LinkedHashMap<>(capacity, loadFactor, accessOrder);
Hier ist accessOrder ein Boolescher Wert. Der Standardwert ist false. In diesem Fall werden die Einträge in der doppelten Liste nach ihrer Einfügeordnung sortiert.
Wenn jedoch der Wert von accessOrder auf true gesetzt ist, werden die Einträge in der doppelten Liste nach der Reihenfolge der letzten Zugriffsortierung sortiert.
Nachstehend ist eine doppelte Liste, die alle Elemente eines anderen Maps enthält.
import java.util.LinkedHashMap; class Main { public static void main(String[] args) { //LinkedHashMap für gerade Zahlen erstellen Erstelle LinkedHashMap von geraden Zahlen verwende put() 2); evenNumbers.put("Two", 4); System.out.println("LinkedHashMap1: " + System.out.println("aktualisierter LinkedHashMap(): ") //LinkedHashMap aus anderen LinkedHashMap erstellen LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>(evenNumbers); numbers.put("Three", 3); System.out.println("LinkedHashMap2: " + numbers); {} {}
Ausgabeergebnis
LinkedHashMap1: {Two=2neuer LinkedHashMap: {One=4{} LinkedHashMap2: {Two=2neuer LinkedHashMap: {One=4Three=3{}
Diese Klasse LinkedHashMap bietet verschiedene Operationen auf dem Map an.
füge den Element ein in LinkedHashMap - put()/füge den angegebenen Schlüssel
Wertzuordnung wird in die Zuordnung eingefügt -putAll()
füge alle Einträge der angegebenen Zuordnung in dieses Map ein -putIfAbsent()/wenn das Map keine angegebene Schlüssel enthält, füge den angegebenen Schlüssel
z.B.
import java.util.LinkedHashMap; class Main { public static void main(String[] args) { // Wertzuordnung wird in das Map hineingefügt Erstelle LinkedHashMap von geraden Zahlen // LinkedHashMap<String, Integer> evenNumbers = new LinkedHashMap<>(); verwende put() 2); evenNumbers.put("Two", 4); evenNumbers.put("Four", + System.out.println("aktualisierter LinkedHashMap(): ") // System.out.println("ursprünglicher LinkedHashMap: ") verwende putIfAbsent() 6); evenNumbers.putIfAbsent("Six", + System.out.println("aktualisierter LinkedHashMap(): ") //evenNumbers); LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>(); numbers.put("One", 1); // Erstelle LinkedHashMap von numbers verwende putAll() numbers.putAll(evenNumbers); + numbers); {} {}
Ausgabeergebnis
System.out.println("neuer LinkedHashMap: ")2neuer LinkedHashMap: {One=4{} ursprünglicher LinkedHashMap: {Two=2neuer LinkedHashMap: {One=4, Four=6{} aktualisierter LinkedHashMap: {Two=1Two=2neuer LinkedHashMap: {One=4, Four=6{}
1.verwende entrySet(), keySet() und values(), um auf die Elemente von LinkedHashMap zuzugreifen
entrySet() -gibt alle Schlüssel der Zuordnung zurück/Sammlung der Wertzuordnungen
keySet() - gibt die Sammlung aller Schlüssel des Maps zurück
values() - gibt die Sammlung aller Werte des Maps zurück
z.B.
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); // verwende entrySet() System.out.println("Schlüssel")/Wertzuordnung: + numbers.entrySet()); // verwende keySet() System.out.println("Schlüssel(键): ") + numbers.keySet()); // verwende values() System.out.println("Werte(值): ") + numbers.values()); {} {}
Ausgabeergebnis
LinkedHashMap: {One=1Two=2Three=3{} Schlüssel/Wertzuordnung: [One=1Two=2Three=3] Schlüssel (Keys): [One, Two, Three] Werte (Values): [1, 2, 3]
2.Verwenden Sie get() und getOrDefault()
get() - Geben Sie den Wert zurück, der mit dem angegebenen Schlüssel verknüpft ist. Wenn der Schlüssel nicht gefunden wird, wird null zurückgegeben.
getOrDefault() - Geben Sie den Wert zurück, der mit dem angegebenen Schlüssel verknüpft ist. Wenn der Schlüssel nicht gefunden wird, wird der angegebene Standardwert zurückgegeben.
z.B.
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); // Verwenden Sie get() int value1 = numbers.get("Three"); System.out.println("Geben Sie die Zahl zurück: " + value1); // Verwenden Sie getOrDefault() int value2 = numbers.getOrDefault("Five", 5); System.out.println("Geben Sie die Zahl zurück: " + value2); {} {}
Ausgabeergebnis
LinkedHashMap: {One=1Two=2Three=3{} Geben Sie die Zahl zurück: 3 Geben Sie die Zahl zurück: 5
remove(key) - Geben Sie das Element zurück und entfernen Sie es aus der Map, das mit dem angegebenen Schlüssel verknüpft ist.
remove(key, value) - Entfernen Sie den Eintrag aus der Map, wenn die angegebene Schlüssel-Wert-Kombination existiert und geben Sie den Boolean-Wert zurück.
z.B.
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); //Methode zum Entfernen mit einem Parameter int value = numbers.remove("Two"); System.out.println("Gelöschter Wert: " + value); //Methode zum Entfernen mit zwei Parametern boolean result = numbers.remove("Three", 3); System.out.println("Eintrag3Wurde gelöscht? " + result); System.out.println("Aktualisierte LinkedHashMap: {" + numbers); {} {}
Ausgabeergebnis
LinkedHashMap: {One=1Two=2Three=3{} Gelöschter Wert: 2 Eintrag3Wurde gelöscht? True Aktualisierte LinkedHashMap: {One=1{}
Methode | Beschreibung |
---|---|
clear() | Löschen Sie alle Einträge aus dem Map |
containsKey() | Überprüfen Sie, ob das Map das angegebene Schlüssel enthält und geben Sie einen Boolean-Wert zurück |
containsValue() | Überprüfen Sie, ob das Map das angegebene Wert enthält und geben Sie einen Boolean-Wert zurück |
size() | Geben Sie die Größe des Maps zurück |
isEmpty() | Überprüfen Sie, ob das Map leer ist, und geben Sie einen Boolean-Wert zurück |
LinkedHashMap und HashMap implementieren beide das Map-Interface. Allerdings gibt es zwischen ihnen einige Unterschiede.
LinkedHashMap führt intern eine doppelte Liste. Daher behält es die Reihenfolge der Elemente bei.
LinkedHashMap benötigt mehr Speicherplatz als HashMap. Dies liegt daran, dass LinkedHashMap intern eine Liste führt.
Die Leistung von LinkedHashMap ist langsamer als die von HashMap.