LRU算法
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) {
HashMap<String, Integer> map =
// 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 Map<String,Integer> cache;
public static void main(String[] args) {
cache = new LinkedHashMap<String, Integer>(3,0.75f,true) {
protected boolean removeEldestEntry(
Map.Entry<String, Integer> 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. 重新的插入到对头