linkedhashmap实现lru
时间: 2023-04-25 21:01:39 浏览: 174
LinkedHashMap可以通过重写removeEldestEntry方法实现LRU(Least Recently Used)算法。具体实现步骤如下:
1. 创建一个LinkedHashMap对象,并设置accessOrder为true,表示按照访问顺序排序。
2. 重写removeEldestEntry方法,当map中的元素个数超过指定的阈值时,删除最近最少使用的元素。
3. 在使用map时,每次访问一个元素时,都会将该元素移到链表的末尾,表示最近使用过。
示例代码如下:
```java
public class LRUCache<K, V> extends LinkedHashMap<K, V> {
private int capacity;
public LRUCache(int capacity) {
super(capacity, .75f, true);
this.capacity = capacity;
}
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
return size() > capacity;
}
}
```
在使用LRUCache时,只需要像使用普通的Map一样即可,例如:
```java
LRUCache<Integer, String> cache = new LRUCache<>(2);
cache.put(1, "a");
cache.put(2, "b");
cache.get(1);
cache.put(3, "c");
System.out.println(cache); // 输出:{1=a, 3=c}
```
在上述代码中,容量为2,先放入1和2两个元素,然后访问1,再放入3,此时2就会被删除,输出结果为{1=a, 3=c}。
阅读全文