Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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
关于Java中LRU缓存实现的问题_Java_Caching_Lru - Fatal编程技术网

关于Java中LRU缓存实现的问题

关于Java中LRU缓存实现的问题,java,caching,lru,Java,Caching,Lru,在Java中实现LRU缓存的标准示例指向示例站点url 在下面的代码段中添加一个新条目之后,默认情况下如何调用RemoveEdestEntry final int MAX_ENTRIES = 100; Map cache = new LinkedHashMap(MAX_ENTRIES+1, .75F, true) { // This method is called just after a new entry has been added public boolean rem

在Java中实现LRU缓存的标准示例指向示例站点url

在下面的代码段中添加一个新条目之后,默认情况下如何调用RemoveEdestEntry

final int MAX_ENTRIES = 100;
Map cache = new LinkedHashMap(MAX_ENTRIES+1, .75F, true) {
    // This method is called just after a new entry has been added
    public boolean removeEldestEntry(Map.Entry eldest) {
        return size() > MAX_ENTRIES;
    }
};

// Add to cache
Object key = "key";
cache.put(key, object);

// Get object
Object o = cache.get(key);
if (o == null && !cache.containsKey(key)) {
    // Object not in cache. If null is not a possible value in the cache,
    // the call to cache.contains(key) is not needed
}

// If the cache is to be used by multiple threads,
// the cache must be wrapped with code to synchronize the methods
cache = (Map)Collections.synchronizedMap(cache);
根据:

removeEldestEntry(Map.Entry)
方法可能会被重写,以强制实施一个策略,以便在向映射添加新映射时自动删除过时的映射

具体而言:

在映射中插入新条目后,
put
putAll
调用此方法

另请注意:

此方法通常不会以任何方式修改映射,而是允许映射按照其返回值的指示修改自身。允许此方法直接修改映射,但如果这样做,则必须返回false(表示映射不应尝试进一步修改)。未指定在此方法中修改贴图后返回true的效果


在本例中,
LinkedHashMap
正在使用扩展名进行扩展


removeEldestEntry
方法正在重写超类的版本,该版本始终返回
false
(表示不应删除最旧的条目)。如果映射的大小超过限制,则重写版本将返回
true
,这表示应删除最旧的条目。

LinkedHashMap类文档声明它将在适当的时间调用RemoveedStentry()方法。在上面的代码中,我们提供了LinkedHashMap类的匿名“扩展”,该类显式地提供了该方法的实现

它将被执行,但它不会做任何事情;正如我在回答中所描述的,您需要扩展LinkedHashMap。问题是:“默认情况下如何调用RemoveedStantry…”感谢您的回答!,所以这是匿名的内部类,我错过了。