题目
146. LRU缓存机制
题解
1 直接用LinkedHashMap来完成
class LRUCache {
private LinkedHashMap<Integer, Integer> map;
public LRUCache(int capacity) {
map = new LinkedHashMap<Integer, Integer>(capacity, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry<Integer,Integer> eldest){
return size() > capacity;
}
};
}
public int get(int key) {
return map.getOrDefault(key, -1);
}
public void put(int key, int value) {
map.put(key, value);
}
}
2 用LinkedList 和HashMap来完成
1 put
1 判断key
是否已经在哈希遍历存在的了,如果存在那么就就要更新哈希表里的value
,还有吧原来的list的key
值给 remove
了,然后 addLast
2 如果不存在list直接addLast,哈希表添加新的值
2 查询
1 如果存在,那么list remove,同时addLast ,同时从HashMap返回值
2 如果不存在,返回-1;
public class LruCache01 {
int capacity = 0;
LinkedList<Integer> list = null;
HashMap<Integer, Integer> map = null;
public LruCache01(int capacity) {
this.capacity = capacity;
list = new LinkedList<>();
map = new HashMap<>();
}
public int get(int key) {
if (map.containsKey(key)) {
list.remove(new Integer(key));
list.addLast(key);
return map.get(key);
}
return -1;
}
public void put(int key, int value) {
if (map.containsKey(key)) {
list.remove(new Integer(key));
list.addLast(key);
map.put(key, value);
} else {
list.addLast(key);
map.put(key, value);
if (list.size() > this.capacity) {
int keyTemp = list.removeFirst();
map.remove(keyTemp);
}
}
}
}