我想構建一個快速的LRU緩存。 這種解決方案是一種很好的方法嗎? 那麼同步呢?LRU在java中快速實現的最佳方法
有一個名爲removeEldestEntry的受保護方法。當項目被添加到地圖時調用此方法。默認實現只是返回false。但我可以子類LinkedHashMap並重寫此方法來檢查是否已達到最大大小,然後只返回true。 LinkedHashMap將通過鏈接列表找到最舊的條目,並在添加新條目之前對其進行引導。
public class MyLRUMap<K,V> extends LinkedHashMap<K,V> {
private int maxCapacity;
public MyLRUMap(int initialCapacity, float loadFactor, int maxCapacity) {
super(initialCapacity, loadFactor, true);
this.maxCapacity = maxCapacity;
}
@Override
protected boolean removeEldestEntry(Entry<K,V> eldest) {
return size() >= this.maxCapacity;
}
}
感謝
是不是b因爲在插入新元素之後調用removeEldest方法? 如果我做> =,我的地圖將維持maxCapacity -1的大小? –
正確,根據Javadoc,removedEldest被稱爲AFTER put()和putAll() – dkatzel