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算法缓存数据。

posted @ 2013-05-16 15:38  wuminxss  阅读(471)  评论(0编辑  收藏  举报