zoukankan      html  css  js  c++  java
  • 基于LinkedhashMap实现的LRU算法

    LRU全称是Least Recently Used,即最近最久未使用的意思。
    LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。
    解决的实际问题:当做数据缓存时,缓存的数据会随着时间的推移越来越多,如果没有缓存清除策略,那么会出现俩个问题:1、缓存越来越大挤爆内存。2、很多不使用的数据占据这内存空间,导致内存得不到有效利用。
    此场景使用LRU算法非常合适。
    LRU算法的主要思想:

      1.设置一个缓存阈值,超过阈值删除最老的数据。

      2.保证最老的数据总是在链表的头部,最新的数据总是在尾部,这样每次需要删除数据时把头部数据删除即可。

    linkedHashMap对LRU算法的实现:

    import java.util.LinkedHashMap;
    import java.util.Map;
    
    public class LRU<K,V> extends LinkedHashMap<K, V> implements Map<K, V>{
    
       // private static final long serialVersionUID = 1L;
    
        public LRU(int initialCapacity,
                 float loadFactor,
                            boolean accessOrder) {
            super(initialCapacity, loadFactor, accessOrder);
        }
    
        /** 
         * @description 重写LinkedHashMap中的removeEldestEntry方法,当LRU中元素多余6个时,
         *              删除最不经常使用的元素
         * @author daoshao       
         * @param eldest
         * @return     
         * @see java.util.LinkedHashMap#removeEldestEntry(java.util.Map.Entry)     
         */  
        @Override
        protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) {
            // TODO Auto-generated method stub
            if(size() > 6){
                return true;
            }
            return false;
        }
    
        public static void main(String[] args) {
    
            LRU<Character, Integer> lru = new LRU<Character, Integer>(
                    16, 0.75f, true);
    
            String s = "abcdefghijkl";
            for (int i = 0; i < s.length(); i++) {
                lru.put(s.charAt(i), i);
            }
            System.out.println("LRU中key为h的Entry的值为: " + lru.get('h'));
            System.out.println("LRU的大小 :" + lru.size());
            System.out.println("LRU :" + lru);
        }
    }

     

  • 相关阅读:
    [转]tensorflow提示:No module named ''tensorflow.python.eager"
    mac使用pip3安装tensorflow(不用conda)
    不限速、没广告的迅雷(旧版迅雷)
    python从国内镜像安装第三方库
    Jupyter 安装并配置工作路径[转]
    VS2013只显示会附加到进程,无法启动调试
    电脑磁盘空间占用高于文件夹大小
    Latex基础
    C#/.Net 部分缩写
    texstudio设置外部浏览器及右侧预览不能使用问题
  • 原文地址:https://www.cnblogs.com/Young111/p/11470856.html
Copyright © 2011-2022 走看看