LRU算法模拟java
时间: 2023-07-10 17:07:18 浏览: 117
LRU(Least Recently Used)算法是一种常用的缓存淘汰策略,它会淘汰最久未使用的缓存数据。在实现 LRU 算法时,可以使用 LinkedHashMap 类型,它内部维护了一个双向链表和一个哈希表,可以方便地实现 LRU 算法。
以下是使用 Java 实现 LRU 算法的示例代码:
```java
import java.util.LinkedHashMap;
import java.util.Map;
public class LRUCache<K, V> extends LinkedHashMap<K, V> {
private final int MAX_CACHE_SIZE;
public LRUCache(int cacheSize) {
// accessOrder设置为true表示按照访问时间排序
super((int) Math.ceil(cacheSize / 0.75) + 1, 0.75f, true);
MAX_CACHE_SIZE = cacheSize;
}
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
// 当超过缓存限制时,移除最近最少使用的元素
return size() > MAX_CACHE_SIZE;
}
}
```
在上面的代码中,我们继承了 LinkedHashMap 类,并重写了 removeEldestEntry 方法,当超过缓存限制时,移除最近最少使用的元素。
使用时,可以通过如下方式创建 LRUCache:
```java
LRUCache<Integer, String> cache = new LRUCache<>(2);
cache.put(1, "one");
cache.put(2, "two");
cache.put(3, "three");
System.out.println(cache.get(1)); // 输出 null
System.out.println(cache.get(2)); // 输出 "two"
System.out.println(cache.get(3)); // 输出 "three"
```
上面的代码中,我们创建了一个容量为 2 的 LRUCache,当添加第三个元素时,会移除最近最少使用的元素。在获取元素时,已经被淘汰的元素将返回 null。
阅读全文