[力扣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添加到链表尾部
    }
}
相关推荐
wuminyu3 小时前
专家视角看Java字节码加载与存储指令机制
java·linux·c语言·jvm·c++
Navigator_Z4 小时前
LeetCode //C - 1033. Moving Stones Until Consecutive
c语言·算法·leetcode
callJJ4 小时前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
wbs_scy5 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言
jinanwuhuaguo6 小时前
(第三十三篇)五月的文明奠基:OpenClaw 2026.5.2版本的文明级解读
android·java·开发语言·人工智能·github·拓扑学·openclaw
xmjd msup7 小时前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
952367 小时前
SpringBoot统一功能处理
java·spring boot·后端
Lyyaoo.7 小时前
优惠券秒杀业务分析
java·开发语言
消失的旧时光-19437 小时前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法
勿忘初心12217 小时前
Java 国密 SM4 加密工具类实战(Hutool + BouncyCastle)|企业级数据加密 + 兼容 JDK8
java·数据安全·数据加密·后端开发·企业级开发·国密 sm4