力扣146. LRU 缓存
文章来源:https://www.toymoban.com/news/detail-681365.html
使用LinkedHashmap(HashMap的子类,能够记住插入数据的顺序).
LRU是Lease Recently User的缩写,意思是最近 最少使用。比如设计一个文件缓存系统,每个文件有自己的大小和访问时间,文件缓存系统有总的大小,当往这个文件系统中放入新的文件时,如果发现超出文件缓存系统的容量,那么把访问时间最旧的文件删掉。
LRU实现代码如下文章来源地址https://www.toymoban.com/news/detail-681365.html
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添加到链表尾部
}
}
到了这里,关于[力扣146. LRU 缓存 ](https://leetcode.cn/problems/lru-cache/description/)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!