146. LRU 缓存
主要是利用LinkedHashMap的功能
LinkedHashMap继承了HashMap
学到了LinkedHashMap维护双向链表的方法
LinkedHashMap的Entry加入了一个before和after,用于维护Entry的加入顺序。
next维护各个桶的顺序。
回忆LinkedHashMap源码记得看:
https://blog.csdn.net/weixin_45864705/article/details/127145695
class LRUCache { int cap; LinkedHashMap<Integer, Integer> cache = new LinkedHashMap<>(); public LRUCache(int capacity) { this.cap = capacity; } public int get(int key) { if (!cache.containsKey(key)) { return -1; } makeRecently(key); return cache.get(key); } public void put(int key, int val) { if (cache.containsKey(key)) { cache.put(key, val); makeRecently(key); return; }
//使用keySet方法获得所有key的集合,因为LinkedHashMap是一个有序的集合,所以会显示链表第一个key,然后使用iterator迭代器获取key集合,调用next方法获取第一个key对应的value。 if (cache.size() >= this.cap) { int oldestKey = cache.keySet().iterator().next(); cache.remove(oldestKey); } cache.put(key, val); } private void makeRecently(int key) { int val = cache.get(key); cache.remove(key); cache.put(key, val); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~