力扣146. LRU 緩存
文章來源:http://www.zghlxwxcb.cn/news/detail-681365.html
使用LinkedHashmap(HashMap的子類,能夠記住插入數(shù)據(jù)的順序).
LRU是Lease Recently User的縮寫,意思是最近 最少使用。比如設(shè)計(jì)一個(gè)文件緩存系統(tǒng),每個(gè)文件有自己的大小和訪問時(shí)間,文件緩存系統(tǒng)有總的大小,當(dāng)往這個(gè)文件系統(tǒng)中放入新的文件時(shí),如果發(fā)現(xiàn)超出文件緩存系統(tǒng)的容量,那么把訪問時(shí)間最舊的文件刪掉。
LRU實(shí)現(xiàn)代碼如下文章來源地址http://www.zghlxwxcb.cn/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,重新插入到隊(duì)尾
cache.remove(key);
cache.put(key, val);// 刪除 key,重新插入到隊(duì)尾
}
public LRUCache(int capacity) {//初始化 LRU 緩存
this.cap = capacity;
}
public int get(int key) {// 如果關(guān)鍵字 key 存在于緩存中,則返回關(guān)鍵字的值,否則返回 -1
if(!cache.containsKey(key)){
return -1;
}
makeRecently(key);//將key設(shè)置為最近使用
return cache.get(key);
}
public void put(int key, int val) {//如果關(guān)鍵字 key 已經(jīng)存在,則變更其數(shù)據(jù)值 value ;
if(cache.containsKey(key)){
cache.put(key, val);// 修改 key 的值
makeRecently(key);// 將 key 變?yōu)樽罱褂?/span>
return;
}
if(cache.size() >= this.cap){
int oldestKey = cache.keySet().iterator().next();//鏈表頭部就是最久未使用的key
cache.remove(oldestKey);
}
cache.put(key,val);//將新的key添加到鏈表尾部
}
}
到了這里,關(guān)于[力扣146. LRU 緩存 ](https://leetcode.cn/problems/lru-cache/description/)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!