加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用LinkedHashMap实现LRU缓存

发布时间:2020-12-14 05:24:22 所属栏目:Java 来源:网络整理
导读:我试图使用LinkedHashMap实现LRU缓存. 在LinkedHashMap( http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html)的文档中,它说: 请注意,如果将键重新插入到地图中,则插入顺序不受影响. 但是当我做下面的表达 public class LRUCacheK,V ex
我试图使用LinkedHashMap实现LRU缓存.
在LinkedHashMap( http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html)的文档中,它说:

请注意,如果将键重新插入到地图中,则插入顺序不受影响.

但是当我做下面的表达

public class LRUCache<K,V> extends LinkedHashMap<K,V> {
    private int size;

    public static void main(String[] args) {
        LRUCache<Integer,Integer> cache = LRUCache.newInstance(2);
        cache.put(1,1);
        cache.put(2,2);
        cache.put(1,1);
        cache.put(3,3);

        System.out.println(cache);
    }

    private LRUCache(int size) {
        super(size,0.75f,true);
        this.size = size;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
        return size() > size;
    }

    public static <K,V> LRUCache<K,V> newInstance(int size) {
        return new LRUCache<K,V>(size);
    }

}

输出是

{1=1,3=3}

这表明重新插入确实影响了订单.
有谁知道任何解释吗?

解决方法

正如@Jeffrey所说,你正在使用accessOrder.创建LinkedHashMap时,第三个参数指定顺序如何更改.
"true for access-order,false for insertion-order"

对于LRU的更详细的实现,你可以看看这个
http://www.programcreek.com/2013/03/leetcode-lru-cache-java/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读