推广 热搜: 二手  净利2626万  北京  二手车  SMM废铜现货交易日评  企业  全国  汽车  三星  公司 

Java达成LRU缓存算法的例子

   日期:2024-11-07     来源:www.nuecuan.com    作者:二手网    浏览:491    评论:0    
核心提示:[db:简介]
1、什么是LRU

LRU(LeastRecentlyUsed,近期最少用)是一种缓存算法,其核心思想是将近期最少用的缓存项移除,以便为更常见的缓存项腾出空间。

在实质应用中,LRU 算法被广泛用于缓存和页面置换。

2、Java 达成 LRU 缓存算法

在 Java 中,可以用linkedHashMap来达成 LRU 缓存算法。
linkedHashMap 是 HashMap 的一个子类,其内部用双向链表维护元素的顺序。

具体达成思路如下:

继承 linkedHashMap,重写 removeEldestEntry 办法,该办法返回 true 表示需要移除最老的缓存项;

在架构办法中指定 accessOrder 为 true,如此在访问元素时就会把该元素移动到链表尾部,便捷后续查找和移除;

在访问缓存项时,用 get 办法获得元素,并通过 removeEldestEntry 办法来判断是不是需要移除最老的缓存项;

在添加缓存项时,用 put 办法将元素加入 linkedHashMap 中。

用 linkedHashMap 达成 LRU 缓存算法的示例代码如下:

importjava.util.linkedHashMap;importjava.util.Map;publicclassLRUCacheK,VextendslinkedHashMapK,V{privatefinalintcapacity;publicLRUCache(intcapacity){super(capacity,0.75f,true);this.capacity=capacity;}@OverrideprotectedbooleanremoveEldestEntry(Map.EntryK,Veldest){returnsize()capacity;}publicstaticvoidmain(String[]args){LRUCacheInteger,Stringcache=newLRUCache(3);cache.put(1,one);cache.put(2,two);cache.put(3,three);System.out.println(cache);//{1=one,2=two,3=three}cache.get(2);System.out.println(cache);//{1=one,3=three,2=two}cache.put(4,four);System.out.println(cache);//{3=three,2=two,4=four}}}

在上面的示例代码中,大家创建了一个 LRUCache 类,继承了 linkedHashMap,并在架构办法中指定了 accessOrder 为 true。
在 removeEldestEntry 办法中,当缓存项数目超越容量时返回 true,表示需要移除最老的缓存项。
在访问缓存项时,用 get 办法获得元素,假如缓存项数目超越容量,则会移除最老的缓存项。
在添加缓存项时,用 put 办法将元素加入 linkedHashMap 中。
最后,在 main 办法中对缓存进行测试。

应该注意的是,在用 linkedHashMap 达成 LRU 缓存时,需要指定 accessOrder 为 true,不然 linkedHashMap 会根据插入顺序维护元素的顺序,而不是访问顺序。

 
标签: Java LRU
打赏
 
更多>同类二手资讯
0相关评论

热门推荐
推荐图文
推荐二手资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  免责声明  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报