LinkedHashMap
verwenden, der eine Maximalgröße verpasst wird. Die Objekt-Instanzen in der LinkedHashMap
rutschen mit jedem weiteren, hinzugefügten Eintrag weiter nach Hinten. Die im Beispiel implementierte Methode removeEldestEntry
sorgt dann dafür, dass die letzten, und somit auch die ältesten Einträge, die über die Maximalgröße hinausreichen, weggeworfen werden. Einträge wiederum die via get
angefordert wurden, wandern praktischer Weise auch gleich wieder nach vorne, was dazu führt, dass sie länger im Cache verbleiben.Hier also die versprochene Klasse. An Einfachheit wirklich kaum zu übertreffen:
/** * Provides support for a LRU (least recently used) cache. * This cache is not thread safe and would need to wrap with Collections.synchronizedMap() if thread safety is needed. */ public class LRUCacheMap<K, V> extends LinkedHashMap<K, V>{ private final int maxSize; /** * @param maxSize maximum number of entries. */ public LRUCacheMap(final int maxSize) { super(maxSize * 4 / 3, 0.75f, true); this.maxSize = maxSize; } @Override protected boolean removeEldestEntry(Map.Entry<K,V> eldest) { return size() > maxSize; } }
via Vanilla Java
Keine Kommentare:
Kommentar veröffentlichen
Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.