用一个哈希表存储键值对,用双端队列存键值,每次使用数据时更新双端队列,以表示使用频率以及容量的限制。
import java.util.*;
class LRUCache {
int capacity;
Map<Integer, Integer> map = new HashMap<>();
//队尾是最近使用的,队首是最久使用的
Deque<Integer> deque = new LinkedList<>();
public LRUCache(int capacity) {
this.capacity = capacity;
}
public int get(int key) {
if(map.containsKey(key)){
deque.remove(key);
deque.addLast(key);
return map.get(key);
}
return -1;
}
public void put(int key, int value) {
if(map.containsKey(key)){
deque.remove(key);
}
else if(map.size() < capacity){
}
else{
int tempKey = deque.removeFirst();
map.remove(tempKey);
}
map.put(key, value);
deque.addLast(key);
}
}