概念
LRU (Least Recently Used-最近最少使用) 是一种常见的缓存淘汰算法,其核心思想是:当缓存空间不足时,优先淘汰最久未被使用的数据。它基于"局部性原理"——最近被访问的数据未来更可能被再次访问。
核心特点
- 有序性:维护数据项的访问顺序
- 快速访问:需要快速查找、插入和删除
- 淘汰机制:缓存满时删除最久未使用的数据
时间复杂度要求
- 查找操作:O(1)
- 插入操作:O(1)
- 删除操作:O(1)
实现方案
使用 双向链表 + 哈希表 的组合:
- 双向链表:维护访问顺序(头节点存放最近访问,尾节点存放最久未访问)
- 哈希表:提供O(1)的键值查找能力
Java代码实现示例
import java.util.HashMap;
import java.util.Map;
public class LRUCache<K, V> {
// 双向链表节点
class Node {
K key;
V value;
Node prev;
Node next;
Node() {}
Node(K key, V value) {
this.key = key;
this.value = value;
}
}
// 缓存容量
private final int capacity;
// 哈希表用于快速查找
private final Map<K, Node> cache;
// 链表头尾指针
private final Node head, tail;
// 当前缓存大小
private int size;
public LRUCache(int capacity) {
this.capacity = capacity;
this.size = 0;
cache = new HashMap<>();
// 创建虚拟头尾节点(哨兵节点)
head = new Node();
tail = new Node();
head.next = tail;

最低0.47元/天 解锁文章
2053

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



