zoukankan      html  css  js  c++  java
  • 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算法缓存数据。

  • 相关阅读:
    13年7月memory point
    getDefinitionByName getDefinition 区别
    cocos2d-html5版日历组件
    一个js对象的代码结构
    计算机操作系统复习
    计算机组成原理复习
    最新的hustoj搭建姿势
    推荐算法学习笔记
    BUPT 2012复试机考 4T
    BUPT 2012复试机考 3T
  • 原文地址:https://www.cnblogs.com/shaddock2013/p/3081963.html
Copyright © 2011-2022 走看看