面试题 16.25. LRU缓存
代码
class LRUCache {
// 使用LinkedHashMap
HashMap<Integer, Integer> map;
// 因为LinkedHashMap是继承自HashMap的,初始化容量使用的是HashMap的,所以 24 = 32(当申请24容量的时候,实际给的是32)
public int capacity;
public LRUCache(int capacity) {
// 映射地址,并且设置容量
map = new LinkedHashMap<>(capacity);
// 初始化容量
this.capacity = capacity;
}
// 每次get,都将当前的元素移到最后面,不然就按照顺序进行排序
public int get(int key) {
if (map.containsKey(key)) {
// remove key 返回的是value
int value = map.remove(key);
map.put(key, value);
return value;
}
return -1;
}
public void put(int key, int value) {
if (map.containsKey(key)) {
map.remove(key);
map.put(key, value);
return;
}
map.put(key, value);
// 如果超出了容量范围
if (map.size() > capacity) {
// 删除在头的
map.remove(map.entrySet().iterator().next().getKey());
}
}
}
其他写法,在我写完,看别人题解的时候,发现代码和人家写的差不多,但是人家给出了其他几种写法,这里记录一下。