146. LRU 缓存

主要是利用LinkedHashMap的功能

LinkedHashMap继承了HashMap

学到了LinkedHashMap维护双向链表的方法

LinkedHashMap的Entry加入了一个before和after,用于维护Entry的加入顺序。

        next维护各个桶的顺序。

回忆LinkedHashMap源码记得看:

https://blog.csdn.net/weixin_45864705/article/details/127145695

 

复制代码
class LRUCache {
    int cap;
    LinkedHashMap<Integer, Integer> cache = new LinkedHashMap<>();
    public LRUCache(int capacity) { 
        this.cap = capacity;
    }
    
    public int get(int key) {
        if (!cache.containsKey(key)) {
            return -1;
        }
        makeRecently(key);
        return cache.get(key);
    }
    
    public void put(int key, int val) {
        if (cache.containsKey(key)) {
            cache.put(key, val);
            makeRecently(key);
            return;
        }

//使用keySet方法获得所有key的集合,因为LinkedHashMap是一个有序的集合,所以会显示链表第一个key,然后使用iterator迭代器获取key集合,调用next方法获取第一个key对应的value。
if (cache.size() >= this.cap) { int oldestKey = cache.keySet().iterator().next(); cache.remove(oldestKey); } cache.put(key, val); } private void makeRecently(int key) { int val = cache.get(key); cache.remove(key); cache.put(key, val); } }
复制代码

 

posted @   Lee最好好好吃饭  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示