LRU在java中快速实现的最佳方法

时间:2013-08-20 14:14:53

标签: java algorithm caching lru

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

由于

3 个答案:

答案 0 :(得分:2)

这是推荐的方法,尽管最好是size() > this.maxCapacity代替>=

答案 1 :(得分:2)

我想为此推荐guava / cachebuilder

答案 2 :(得分:0)

“Java Generics and Collections”一书中提到了这种实现。 here