LRU算法的JAVA使用
LRU是Least Recently Used的简写,翻译成最近最少使用算法,在内存管理上面很使用。字面上就很好理解,下边引用一个百度百科的例子来理解一下:
假设 序列为 4 3 4 2 3 1 4 2
物理块有3个 则
首轮 4调入内存 4
次轮 3调入内存 3 4
之后 4调入内存 4 3
之后 2调入内存 2 4 3
之后 3调入内存 3 2 4
之后 1调入内存 1 3 2(因为最少使用的是4,所以丢弃4)
之后 4调入内存 4 1 3(原理同上)
最后 2调入内存 2 4 1
利用LinkedHashMap类,覆写removeEldestEntry方法,实现一个最简单的LRU算法:
public static void main(String[] args) { int[] array = {4, 3, 4, 2, 3, 1, 4, 2 };//要输入数字的序列 LinkedHashMap<Integer, Boolean> map = new LinkedHashMap<Integer, Boolean>() { private static final long serialVersionUID = 1L; @Override protected boolean removeEldestEntry( java.util.Map.Entry<Integer, Boolean> eldest) { return size() > 3;//此处MAP最大容量为3,大于3的从最老的map移除 } }; for (int i = 0; i < array.length; i++) { System.out.println(array[i]); if (map.containsKey(array[i])) { map.remove(array[i]); } map.put(array[i], true); System.out.println(map); } }
Ps. LinkedHashMap是HashMap的一个子类,它记录了map键值对插入的顺序,输入和输出顺序相同,也就是先进先出,非常适合用于LRU算法缓存数据。