public class LRUCache {
public LRUCache(int capacity) {
size = capacity; //长度 限制 三个参数没写
map = new HashMap<Integer, Integer>();
list = new LinkedList<Integer>();
}
public int get(int key) {
Integer temp = map.get(key);
if (temp == null) {
return -1;
}
list.remove((Integer) key);
list.add(key);
return temp;
}
public void put(int key, int value) {
if (map.get(key) != null) {
map.put(key, value);
list.remove((Integer) key);
list.add(key);
}else {
if (size != map.size()) {
list.add(key);
map.put(key, value);
} else {
Integer x = list.get(0);
map.remove(x);
list.remove(0);
map.put(key, value);
list.add(key);
}
}
}
}
//使用linkedHashMap
class LRUCache extends LinkedHashMap<Integer, Integer>{
private int capacity;
public LRUCache(int capacity) {
super(capacity, 0.75F, true);
this.capacity = capacity;
}
public int get(int key) {
return super.getOrDefault(key, -1);
}
public void put(int key, int value) {
super.put(key, value);
}
@Override
protected boolean removeEldestEntry(Map.Entry<Integer, Integer> eldest) {
return size() > capacity;
}
}
/**
* LRUCache 对象会以如下语句构造和调用:
* LRUCache obj = new LRUCache(capacity);
* int param_1 = obj.get(key);
* obj.put(key,value);
*/