zoukankan      html  css  js  c++  java
  • LinkedHashMap实现LRU

    LinkedHashMap 底层使用HashMap实现,为了实现对key的顺序访问,底层同时也维护一个链表。在LinkedHashMap中有两种排序规则,一种是按插入顺序进行排序、一种是按最近获取顺序倒序(即最近访问的数据总会被替换到链表的尾部);利用LinkedHashMap,我们实现LRU,代码接口如下

    /**
     * @author sunyiwei
     */
    public class LRULinkedHashMap<K, V> {
        private LinkedHashMap<K, V> map;
        private int cacheSize;
    
        public LRULinkedHashMap(final int cacheSize) {
            this.cacheSize = cacheSize;
            final float loadFactor = 0.75f;
            map = new LinkedHashMap<K, V>(16, loadFactor, true) {
                //调用put方法后触发,默认是实现是false,不会移除头结点,如果返回true,则会移除头结点
                @Override
                protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
                    if (cacheSize + 1 == map.size()) {
                        return true;
                    } else {
                        return false;
                    }
                }
            };
        }
    
        public synchronized V get(K key){
            return map.get(key);
        }
    
        public synchronized void put(K key,V val){
            map.put(key,val);
        }
    
        public synchronized void clear(){
            map.clear();
        }
    
        public synchronized int size(){
            return map.size();
        }
        
        
    }
    
  • 相关阅读:
    币值转换
    抓老鼠啊~亏了还是赚了?
    第十二周作业
    第十一周作业
    第十周作业
    第九周作业
    第八周作业
    第七周作业
    第五周实验报告和总结
    第四次实验报告及总结
  • 原文地址:https://www.cnblogs.com/yiweiblog/p/14990058.html
Copyright © 2011-2022 走看看