lru算法就是最少使用的数据会在最后显示,使用最多的显示在最前面。
使用linkedHashMap实现LRU算法:
下列的代码会展示LRU算法的数据交换,就是后调用的资源,会跑到代码的前端
package com.jt.collect; import java.util.HashMap; import java.util.linkedHashMap; public class linkedHashMapTests { public static void main(String[] args) { HashMapmap = // new HashMap<>(); new linkedHashMap<>(3,0.75f,true); map.put("A", 100); map.put("B", 200); map.put("C", 300); map.put("D", 400); System.out.println(map); map.get("B"); System.out.println(map); } }
这里的代码展现了LRU算法的末位淘汰,当容器满了的时候,会把末位的值淘汰掉
package com.jt.collect; import java.util.linkedHashMap; import java.util.Map; public class LRUCacheTests { static Mapcache; public static void main(String[] args) { cache = new linkedHashMap (3,0.75f,true) { protected boolean removeEldestEntry( Map.Entry eldest) { return cache.size() > 3; } }; cache.put("A", 100); cache.put("B", 200); cache.put("C", 300); cache.put("D", 400); System.out.println(cache); cache.get("B"); cache.get("C"); cache.put("E", 500); System.out.println(cache); } }
LRU算法应用在一个有界容器中,如果添加一个新的数据,超过了容器的界限,那么容器就会把不常用的数据删除,添加新的元素。
底层实现:
1. 首先基于key获取数据
2. 从链表中删除这个节点
3. 重新的插入到对头
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)