LRU算法java代码实现
时间: 2024-12-12 09:25:44 浏览: 27
Java实现LRU算法.zip
LRU (Least Recently Used) 算法是一种常用的缓存淘汰策略,它会优先移除最近最少使用的数据项。在 Java 中,可以使用 LinkedHashMap 数据结构来实现 LRU 功能,因为 LinkedHashMap 已经内置了对访问顺序的维护。
以下是一个简单的 Java 实现 LRU 算法的例子:
```java
import java.util.LinkedHashMap;
import java.util.Map;
public class LRUCache<K, V> {
private final int capacity;
private final Map<K, Node<K, V>> cache = new LinkedHashMap<>(capacity, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry<K, Node<K, V>> eldest) {
return size() > capacity;
}
};
public class Node<K, V> {
K key;
V value;
Node<K, V> prev, next;
public Node(K key, V value) {
this.key = key;
this.value = value;
}
}
public V get(K key) {
Node<K, V> node = cache.get(key);
if (node == null) {
return null;
} else {
// 将访问过的节点移动到链表头部
moveToHead(node);
return node.value;
}
}
public void put(K key, V value) {
cache.put(key, new Node<>(key, value));
}
private void moveToHead(Node<K, V> node) {
if (node.prev != null) {
node.prev.next = node.next;
}
if (node.next != null) {
node.next.prev = node.prev;
} else {
cache.putFirst(node); // 如果是头结点
}
node.prev = null;
node.next = cache.first();
}
}
```
在这个例子中,`LinkedHashMap` 的构造函数设置了第二个参数为 0.75f 和第三个参数为 true,这意味着加载因子是 0.75,当缓存满时,最久未使用的元素会被移除。`removeEldestEntry` 方法是自定义的,它会在添加新元素时检查是否需要移除最旧的元素。
阅读全文