我想构建一个快速的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