思路如下:
1、LinkedHashMap的有序可以按两种顺序排列,一种是按照插入的顺序,一种是按照读取的顺序(这个题目的示例就是告诉我们要按照读取的顺序进行排序),而其内部是靠 建立一个双向链表 来维护这个顺序的,在每次插入、删除后,都会调用一个函数来进行 双向链表的维护
2、因此可以构造一个LinkedHashMap,通过读取排序确定最久未使用的数值。
class LRUCache {
LinkedHashMap<Integer,Integer> map;
int capacity;
public LRUCache(int capacity) {
map=new LinkedHashMap<>(capacity+1,0.75f,true);
this.capacity=capacity;
}
public int get(int key) {
if(!map.containsKey(key)){
return -1;
}
return map.get(key);
}
public void put(int key, int value) {
map.put(key,value);
//如果超出容量,删除最久未使用的key
if(map.size()>capacity){
Iterator it=map.keySet().iterator();
map.remove(it.next());
}
}
}
/**
* Your LRUCache object will be instantiated and called as such:
* LRUCache obj = new LRUCache(capacity);
* int param_1 = obj.get(key);
* obj.put(key,value);
*/
原题地址:
146. LRU缓存机制