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();
        }
        
        
    }
    
  • 相关阅读:
    设计模式-观察者模式
    idea 生成 protobuf
    springboot @Autowride 注入空 调用时报Null空指针
    Netty 服务端创建过程
    git failed to push some refs to
    SPI simp
    Controller之statefulset
    Service
    Controller之deployment
    rabbitmq“ Login was refused using authentication mechanism PLAIN”
  • 原文地址:https://www.cnblogs.com/yiweiblog/p/14990058.html
Copyright © 2011-2022 走看看