两种做法:
1 双向队列+HashMap
2 直接用java的LinkedHashMap,同时重写它的removeEldestEntry逻辑,当容量超过capacity时移除
class LRUCache {
lruLinkedHashMap <Integer,Integer>map = new lruLinkedHashMap();
int cap;
private class lruLinkedHashMap<K,V> extends LinkedHashMap<K,V>{
@Override
protected boolean removeEldestEntry(Map.Entry<K,V> eldest){
if(size()>cap)
return true;
return false;
}
}
public LRUCache(int capacity) {
cap = capacity;
}
public int get(int key) {
if(map.get(key)!=null){
int v = map.get(key);
map.remove(key,v);
map.put(key,v);
return v;
}
return -1;
}
public void put(int key, int value) {
if(map.get(key)!=null){
int v = map.get(key);
map.remove(key,v);
map.put(key,value);
}
else{
map.put(key,value);
}
return;
}
}
/**
* 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);
*/