题目
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);
}
}
}
}
LRU缓存机制实现
本文详细介绍了一种常用的缓存淘汰策略——LRU(Least Recently Used)缓存机制的两种实现方式:使用LinkedHashMap和结合LinkedList与HashMap。通过具体代码示例,展示了如何在Java中高效地实现LRU缓存,适用于需要频繁访问且需维护访问顺序的场景。
927

被折叠的 条评论
为什么被折叠?



