Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LRU是在java中快速实现的最佳方法_Java_Algorithm_Caching_Lru - Fatal编程技术网

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

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> {

我想构造一个快速的LRU缓存。 这种解决方案是一种很好的方法吗? 那么同步呢

有一种受保护的方法叫做RemoveEdestEntry。将项目添加到地图时调用此方法。默认实现只返回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;
 }
}
公共类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