返回顶部
首页 > 资讯 > 操作系统 >[力扣146. LRU 缓存 ](https://leetcode.cn/problems/lru-cache/description/)
  • 537
分享到

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

javaleetcode 2023-08-30 10:08:14 537人浏览 薄情痞子
摘要

力扣146. LRU 缓存 使用LinkedHashMap(HashMap的子类,能够记住插入数据的顺序). LRU是Lease Recently User的缩写,意思是最近 最少使用。比如设计一个文件缓存系统,每个文件有自己的大小和访问

力扣146. LRU 缓存

使用LinkedHashMap(HashMap的子类,能够记住插入数据的顺序).
LRU是Lease Recently User的缩写,意思是最近 最少使用。比如设计一个文件缓存系统,每个文件有自己的大小和访问时间,文件缓存系统有总的大小,当往这个文件系统中放入新的文件时,如果发现超出文件缓存系统的容量,那么把访问时间最旧的文件删掉。
LRU实现代码如下

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添加到链表尾部    }}

来源地址:https://blog.csdn.net/m0_37938791/article/details/132571060

--结束END--

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

本文链接: https://lsjlt.com/news/382555.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作