行业资讯
📅 2026/8/20 22:59:39
LRU算法的Java实现,基于LinkedHashMap
LRU算法中文名称叫做最近最少使用。比如在Redis的定期淘汰策略中是其一方式原理就是当有一些数据最近最少被使用的数据优先淘汰。实现方式有很多基于LinkedHashMap是最简单的一种LinkedHashMap 本身维护了一个双向链表可以按访问顺序access-order排列元素并且提供了 removeEldestEntry 钩子方法允许我们在插入新元素时自动移除最老条目。优点代码极少利用 JDK 原生机制。缺点LinkedHashMap 不是线程安全的多线程场景需额外同步无法精细控制链表操作如调整节点顺序时的额外逻辑。importjava.util.LinkedHashMap;importjava.util.Map;publicclassLRUCacheByLinkedHashMapK,VextendsLinkedHashMapK,V{privatefinalintmaxCapacity;publicLRUCacheByLinkedHashMap(intmaxCapacity){// 初始容量、负载因子、accessOrdertrue 表示按访问顺序super(16,0.75f,true);this.maxCapacitymaxCapacity;}OverrideprotectedbooleanremoveEldestEntry(Map.EntryK,Veldest){// 当 size 超过最大容量时移除最老的条目returnsize()maxCapacity;}// 测试publicstaticvoidmain(String[]args){LRUCacheByLinkedHashMapInteger,StringcachenewLRUCacheByLinkedHashMap(3);cache.put(1,A);cache.put(2,B);cache.put(3,C);System.out.println(cache);// {1A, 2B, 3C}cache.get(1);// 访问 1它变为最近使用cache.put(4,D);// 容量已满移除最久未使用的 2System.out.println(cache);// {3C, 1A, 4D}}}