Frage

Das Standardbeispiel für die Implementierung LRU Cache in Java verweist auf das Beispiel Depot url http://www.exampledepot.com/egs/java.util/coll_Cache. html

Wie wird removeEldestEntry standardmäßig aufgerufen, nachdem gerade unter einen neuen Eintrag in dem Code-Snippet hinzufügen?

final int MAX_ENTRIES = 100;
Map cache = new LinkedHashMap(MAX_ENTRIES+1, .75F, true) {
    // This method is called just after a new entry has been added
    public boolean removeEldestEntry(Map.Entry eldest) {
        return size() > MAX_ENTRIES;
    }
};

// Add to cache
Object key = "key";
cache.put(key, object);

// Get object
Object o = cache.get(key);
if (o == null && !cache.containsKey(key)) {
    // Object not in cache. If null is not a possible value in the cache,
    // the call to cache.contains(key) is not needed
}

// If the cache is to be used by multiple threads,
// the cache must be wrapped with code to synchronize the methods
cache = (Map)Collections.synchronizedMap(cache);

Andere Tipps

Per Java API für LinkedHashMap :

  

Die removeEldestEntry(Map.Entry) Verfahren können eine Richtlinie zum Entfernen von veralteten Zuordnungen automatisch zu verhängen außer Kraft gesetzt werden, wenn neue Zuordnungen zu der Karte hinzugefügt werden.

Im Einzelnen:

  

Diese Methode wird aufgerufen, durch put und putAll nach einem neuen Eintrag in die Karte eingefügt wird.

Beachten Sie auch:

  

Dieses Verfahren typischerweise nicht die Karte in irgendeiner Weise ändern, anstatt die Karte ermöglicht, sich zu ändern, wie durch den Rückgabewert gerichtet. Es ist für diese Methode erlaubt die Karte direkt zu ändern, aber wenn es so tut, muss es false zurück (was anzeigt, dass die Karte keine weitere Modifikation versuchen sollte). Die Auswirkungen der Rückkehr wahr, nachdem die Karte aus diesem Verfahren modifiziert sind nicht spezifiziert.

Die LinkedHashMap Klasse Dokumentation besagt, dass es die Methode removeEldestEntry () zu geeigneten Zeiten nennen. In dem obigen Code stellen wir ein anonymes „erweitert“ der LinkedHashMap Klasse, die unsere Implementierung explizit für diese Methode zur Verfügung stellt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top