1

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

谢谢

4

3 回答 3

2

我想为此推荐 guava/cachebuilder

于 2013-08-20T14:33:00.547 回答
2

这是推荐的方法,尽管最好这样做size() > this.maxCapacity而不是>=

于 2013-08-20T14:16:55.640 回答
0

此处的“Java 泛型和集合”一书中提到了此实现

于 2013-08-20T14:30:04.280 回答