java实现LRU算法
时间: 2023-07-16 08:13:24 浏览: 111
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) {
super((int) Math.ceil(cacheSize / 0.75) + 1, 0.75f, true);
MAX_CACHE_SIZE = cacheSize;
}
@Override
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > MAX_CACHE_SIZE;
}
public static void main(String[] args) {
LRUCache<String, Integer> cache = new LRUCache<>(3);
cache.put("key1", 1);
cache.put("key2", 2);
cache.put("key3", 3);
System.out.println(cache.keySet());
cache.put("key4", 4);
System.out.println(cache.keySet());
cache.put("key3", 3);
System.out.println(cache.keySet());
cache.put("key5", 5);
System.out.println(cache.keySet());
}
}
```
在这个例子中,我们使用了Java的LinkedHashMap类,它可以按照插入顺序或访问顺序进行遍历。我们继承这个类,并重写了removeEldestEntry方法,当缓存的大小超过最大值时,自动删除最近最少使用的数据。我们还可以使用put方法向缓存中添加数据,使用get方法从缓存中获取数据。
在main方法中,我们创建了一个缓存大小为3的LRUCache对象,并向其中添加了4个键值对。在第一次打印缓存的键集合时,输出结果为[key1, key2, key3]。当添加第4个键值对时,由于缓存大小已经到达了最大值,所以自动删除最近最少使用的key1,输出结果为[key2, key3, key4]。当再次使用key3时,它将变成最新的,输出结果为[key2, key4, key3]。当添加第5个键值对时,由于缓存大小已经到达了最大值,所以自动删除最近最少使用的key2,输出结果为[key4, key3, key5]。
这个例子中使用了泛型,可以存储任何类型的数据。如果要存储其他类型的数据,只需要将K和V的类型改为相应的类型即可。
阅读全文