这次讲解的题目是LeetCode刷题之T146LRU缓存机制:
首先我们先看下题目:
这道题的思路是使用LinkedHashMap进行K-V键值对,首先我们知道LinkedHashMap是一个有序的HashMap,利用其有序性,将最近操作的key取出,放到LinkedHashMap的最后边。
接下来上代码:
class LRUCache {
int max;
HashMap<Integer,Integer> cache=new LinkedHashMap();
public LRUCache(int capacity) {
// 初始化 LRU 缓存容量
this.max=capacity;
}
public int get(int key) {
// 判断是否存在key,如果存在,则取出,并设置为最新使用过的key
if(this.cache.containsKey(key)){
toBeRecentKey(key);
return cache.get(key);
};
return -1;
}
public void put(int key, int value) {
//如果该key已经存在
if(cache.containsKey(key)){
cache.put(key,value);
// 将该key设置为最新的key
toBeRecentKey(key);
return;
};
//如果不存在,判断长度
if(cache.size()>=max){
//删除最久的key
cache.remove(cache.keySet().iterator().next());
}
//新增key
cache.put(key,value);
}
// 将key变为最新的key 即移除并重新插入
public void toBeRecentKey(int key){
int value=cache.get(key);
cache.remove(key);
cache.put(key,value);
}
}