我想构建一个快速LRU缓存。 这种解决方案是一种很好的方法吗? 那同步怎么样?
有一个名为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;
}
}
由于
答案 0 :(得分:2)
这是推荐的方法,尽管最好是size() > this.maxCapacity
代替>=
答案 1 :(得分:2)
我想为此推荐guava / cachebuilder
答案 2 :(得分:0)
“Java Generics and Collections”一书中提到了这种实现。 here