可用Java的LinkHashMap来实现
或者使用map+queue
class LRUCache {
HashMap<Integer,Integer> map = new HashMap<>();
Deque<Integer> queue = new ArrayDeque<>();
int limit = 0;
public LRUCache(int capacity) {
limit = capacity;
}
public int get(int key) {
queue.remove(key);
queue.add(key);
return map.getOrDefault(key, -1);
}
public void put(int key, int value) {
if (map.containsKey(key)){
queue.remove(key);
queue.add(key);
map.put(key,value);
return;
}
if (map.size() >= limit){
map.remove(queue.pollFirst());
}else {
queue.add(key);
}
map.put(key,value);
}
}
LinkedHashMap继承了HashMap
通过在底层维护一个双向队列来实现数据的有序存放
有两种顺序,一种是访问顺序,一种是插入顺序,通过访问顺序可以实现LRU