力扣146. LRU 缓存 使用LinkedHashMap(HashMap的子类,能够记住插入数据的顺序). LRU是Lease Recently User的缩写,意思是最近 最少使用。比如设计一个文件缓存系统,每个文件有自己的大小和访问
使用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
2024-03-01
2024-03-01
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0