LRU是在java中快速实现的最佳方法
我想构造一个快速的LRU缓存。 这种解决方案是一种很好的方法吗? 那么同步呢 有一种受保护的方法叫做RemoveEdestEntry。将项目添加到地图时调用此方法。默认实现只返回false。但我可以将LinkedHashMap子类化并重写此方法以检查是否已达到最大大小,然后返回true。LinkedHashMap将通过链表找到最旧的条目,并在添加新条目之前引导它LRU是在java中快速实现的最佳方法,java,algorithm,caching,lru,Java,Algorithm,Caching,Lru,我想构造一个快速的LRU缓存。 这种解决方案是一种很好的方法吗? 那么同步呢 有一种受保护的方法叫做RemoveEdestEntry。将项目添加到地图时调用此方法。默认实现只返回false。但我可以将LinkedHashMap子类化并重写此方法以检查是否已达到最大大小,然后返回true。LinkedHashMap将通过链表找到最旧的条目,并在添加新条目之前引导它 public class MyLRUMap<K,V> extends LinkedHashMap<K,V> {
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;
}
}
公共类MyRumap扩展LinkedHashMap{
专用int最大容量;
公共MyLRUMap(int initialCapacity、float loadFactor、int maxCapacity){
超级(初始容量、负载系数、真值);
this.maxCapacity=maxCapacity;
}
@凌驾
受保护的布尔重构(最早的入口){
返回大小()>=this.maxCapacity;
}
}
感谢这是推荐的方法,尽管最好是这样做
size()>。maxCapacity
而不是=
这是推荐的方法,尽管最好是这样做size()>。maxCapacity
而不是=
这本书中提到了此实现“Java泛型和集合”
这一实现在《Java泛型和集合》一书中提到
我想推荐guava/cachebuilder用于此我想推荐guava/cachebuilder用于此是因为在插入新元素之后调用Removeedest方法吗?如果我这样做>=,我的映射将保持maxCapacity-1为其大小?根据Javadoc,RemoveDelest在put()之后调用putAll()是因为在插入新元素之后调用removeEldest方法吗?如果我做>=,我的映射将保持maxCapacity-1为其大小?正确,根据Javadoc,在put()和putAll()之后调用removeEldest