LRU 用 LinkedHashMap 实现
时间: 2024-10-10 17:01:31 浏览: 28
LRU算法 java实现
LRU (Least Recently Used) 是一种常用的缓存淘汰策略,它会优先移除最近最少使用的数据项。LinkedHashMap 是 Java 中的一个内置类,非常适合用来实现 LRU 缓存。LinkedHashMap 继承自 HashMap,并添加了链表结构,可以记住元素插入的顺序。
以下是使用 LinkedHashMap 实现 LRU 缓存的基本步骤:
1. 创建 LinkedHashMap 对象,设置其容量大小、初始容量和加载因子(loadFactor),以及是否允许 null 元素(允许的话,null 可以作为最早被淘汰的键值对)。
```java
Map<String, String> lruCache = new LinkedHashMap<>(capacity, loadFactor, true);
```
2. 定义一个固定大小的缓存列表头结点,用于维护访问顺序。当缓存满时,新插入的键值对会替换掉最久未使用的那个。
3. 当向 map 中添加元素时,如果已达到容量,会将最后一个添加的元素从链表头部删除,并将其放入哈希表中,保持链表的头部始终是最新的访问元素。
4. 获取或删除元素时,都会更新该元素在链表中的位置。当调用 `get(key)` 并返回对应的值时,这个 key-value 对会在内部链表中向前移动,表示最近被使用过;如果元素不存在,则返回 null 或者抛出异常。
5. 如果需要清空缓存,可以直接调用 `clear()` 或者遍历 map 删除所有元素。
阅读全文