Python 官方文档:入门教程 => 点击学习
目录概述分析LRU缓存实现总结概述 LinkedHashMap是Java集合中一个常用的容器,它继承了HashMap, 是一个有序的Hash表。那么该如何基于LinkedHashMa
LinkedHashMap是Java集合中一个常用的容器,它继承了HashMap, 是一个有序的Hash表。那么该如何基于LinkedHashMap实现一个LRU缓存呢?这也是面试经常被问到的题目,主要是考察你对Java集合容器的了解程度以及LinkedHashMap的实现原理。
什么是LRU?
LRU(Least Recently Used)指的是最近最少使用,是一种缓存淘汰算法,淘汰掉那个最少使用的的数据。
场景:我们需要设计一个缓存最多只能存储10个元素,当元素个数超过10的时候,删除(淘汰)那些最近最少使用的数据,仅保存热点数据。
public class LRUCache<K, V> extends LinkedHashMap<K, V> {
private final int maxSize;
public LRUCache(int initialCapacity, int maxSize) {
// accessOrder必须为true
super(initialCapacity, 0.75f, true);
this.maxSize = maxSize;
}
// 重写
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
// 当键值对个数超过最大容量时,返回true,触发删除操作
return size() > maxSize;
}
public static void main(String[] args) {
LRUCache<String, String> cache = new LRUCache<>(5, 5);
cache.put("1", "1");
cache.put("2", "2");
cache.put("3", "3");
cache.put("4", "4");
// 做一次查询
cache.get("1");
cache.put("5", "5");
cache.put("6", "6");
cache.put("7", "7");
System.out.println(cache);
}
}
运行结果:
{4=4, 1=1, 5=5, 6=6, 7=7}
因为做了一次cache.get("1")
,相当于操作了1这个元素,变"新"了,所以只能淘汰3, 4。
通过本文想必大家对LinkedHashMap有了更深的了解,可以用它来实现一个LRU缓存,实际上,通过LinkedHashMap实现LRU还是挺常见的,比如logback框架的LRUMessageCache。
到此这篇关于基于LinkedHashMap实现LRU缓存的文章就介绍到这了,更多相关LinkedHashMap实现LRU缓存内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: 基于LinkedHashMap实现LRU缓存
本文链接: https://lsjlt.com/news/212553.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0