[力扣146. LRU 缓存 ](https://leetcode.cn/problems/lru-cache/description/)

力扣146. LRU 缓存

使用LinkedHashmap(HashMap的子类,能够记住插入数据的顺序).

LRU是Lease Recently User的缩写,意思是最近 最少使用。比如设计一个文件缓存系统,每个文件有自己的大小和访问时间,文件缓存系统有总的大小,当往这个文件系统中放入新的文件时,如果发现超出文件缓存系统的容量,那么把访问时间最旧的文件删掉。

LRU实现代码如下

java 复制代码
lass LRUCache {
    int cap;
    LinkedHashMap<Integer, Integer> cache = new LinkedHashMap<>();
    private void makeRecently(int key){
        int val = cache.get(key);//删除key,重新插入到队尾
        cache.remove(key);
        cache.put(key, val);// 删除 key,重新插入到队尾
    }

    public LRUCache(int capacity) {//初始化 LRU 缓存
        this.cap = capacity;
    }
    
    public int get(int key) {// 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1
        if(!cache.containsKey(key)){
            return -1;
        }
        makeRecently(key);//将key设置为最近使用
        return cache.get(key);
    }
    
    public void put(int key, int val) {//如果关键字 key 已经存在,则变更其数据值 value ;
        if(cache.containsKey(key)){
            cache.put(key, val);// 修改 key 的值
            makeRecently(key);// 将 key 变为最近使用
            return;
        }
        if(cache.size() >= this.cap){
            int oldestKey = cache.keySet().iterator().next();//链表头部就是最久未使用的key
            cache.remove(oldestKey);
        }
        cache.put(key,val);//将新的key添加到链表尾部
    }
}
相关推荐
M-Robots echo6 小时前
轻量化裁剪方案解析:M-Robots 模块化构建,适配高低端各类机器人硬件平台
java·机器人·ros·开源社区·atomgit·m-robots
不可求~6 小时前
多模型路由怎么落地:把任务分流写进项目的最小实现
java·前端·数据库
mldong7 小时前
用 DDD 设计工作流引擎:聚合根与充血模型
java·架构
mqiqe8 小时前
AgentScope Java Harness:4. 双层记忆系统 让 Agent 拥有真正的“长期大脑“
java·开发语言
伍一518 小时前
03-文件管理模块-一个看似简单的模块藏着多少细节
java·ruoyi·若依
想吃火锅10058 小时前
【leetcode】200. 岛屿数量
算法·leetcode·职场和发展
gugucoding8 小时前
46. 【Java】JUC并发工具:让并发更简单
java·开发语言
Nil2089 小时前
leetcode 54螺旋矩阵
算法·leetcode·矩阵
Nebula_g9 小时前
JavaSE基础语法:面向对象高级(代码中的成分)
java·开发语言·编程·javase·技术栈·高级语法
AC赳赳老秦9 小时前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw