Junior
Haben Sie schon einmal mit LinkedHashMap gearbeitet?
sobes.tech KI
Antwort von AI
Ja, ich habe Erfahrung damit. LinkedHashMap in Java und Kotlin ist eine Implementierung des Map-Interfaces. Es kombiniert die Eigenschaften von HashMap (schneller Zugriff nach Schlüssel O(1) im Durchschnitt) und LinkedList (bewahrt die Einfügereihenfolge der Elemente).
Hauptmerkmale:
- Reihenfolge beibehalten: Die Iteration erfolgt in der Reihenfolge, in der die Elemente hinzugefügt wurden.
- Leistung: Das Hinzufügen, Entfernen und Suchen von Elementen erfolgt mit amortisiert konstanter Komplexität (O(1)), wie bei
HashMap. - Speicher: Im Vergleich zu
HashMapverwendetLinkedHashMapetwas mehr Speicher, um die Verbindungen zwischen den Elementen zu speichern. - Zugriffsmodus: Kann so konfiguriert werden, dass die Zugriffsreihenfolge beibehalten wird (zuletzt verwendete Elemente werden ans Ende verschoben), was nützlich ist, um einfache LRU-Caches (Least Recently Used) zu implementieren.
Beispiel für die Verwendung in einem LRU-Cache:
// Erstellen eines Caches mit maximaler Größe 5
// true im Konstruktor aktiviert den Zugriffsmodus
LinkedHashMap<String, String> lruCache = new LinkedHashMap<>(5, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {
// Entfernt das älteste Element, wenn die Größe 5 überschreitet
return size() > 5;
}
};
lruCache.put("key1", "value1");
lruCache.put("key2", "value2");
lruCache.put("key3", "value3");
System.out.println(lruCache.get("key1")); // Zugriff auf key1, verschiebt es ans Ende
lruCache.put("key4", "value4");
lruCache.put("key5", "value5");
lruCache.put("key6", "value6"); // Der Cache überschreitet die Größe, das älteste Element wird entfernt (key2, wenn kein Zugriff; key3, wenn Zugriff auf key1)
System.out.println(lruCache);
// Erstellen eines Caches mit Zugriffsmodus (true)
val lruCache = object : LinkedHashMap<String, String>(5, 0.75f, true) {
override fun removeEldestEntry(eldest: Map.Entry<String, String>?): Boolean {
// Entfernt das älteste Element, wenn die Größe 5 überschreitet
return size > 5
}
}
lruCache["key1"] = "value1"
lruCache["key2"] = "value2"
lruCache["key3"] = "value3"
println(lruCache["key1"]) // Zugriff auf key1, verschiebt es ans Ende
lruCache["key4"] = "value4"
lruCache["key5"] = "value5"
lruCache["key6"] = "value6" // Der Cache überschreitet die Größe, das älteste Element wird entfernt
println(lruCache)
LinkedHashMap ist nützlich, wenn die Iterationsreihenfolge der Elemente wichtig ist, sowie für die Implementierung einfacher LRU-Caches.