zoukankan      html  css  js  c++  java
  • java LinkedHashMap实现LRUCache缓存

    package java_map;
    
    import java.util.Collections;
    import java.util.LinkedHashMap;
    import java.util.Map;
    
    public class LRUCache<K,V> extends LinkedHashMap<K, V> {
    
        private static final long serialVersionUID = 1L;
        private static final int MAX_ENTRIES = 3;
        
        @Override
        protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) {
            // TODO Auto-generated method stub
            return size()>MAX_ENTRIES;
        }
        
        public LRUCache() {
            super(16, 0.75f, true);
        }
        
        public static void main(String[] args) {
            Map<Integer,String> cache = Collections.synchronizedMap(new LRUCache<>());
            cache.put(1,"a");
            cache.put(2,"b");
            cache.put(3,"c");
            System.out.println(cache.keySet());
            cache.get(1);
            System.out.println(cache.keySet());
            cache.put(4, "d");
            System.out.println(cache.keySet());
        }
    }
    // linkedHashMap extends HashMap 具有和HashMap一样快的查找速度
    // 内部维护一个双向链表,用来维护插入顺序或者LRU顺序
    // 内部属性accessOrder决定了顺序,默认为false,此时维护的是插入顺序
    // 构造函数 LinkedHashMap(int initialCapacity,float loadFactor,boolean accessOrder)
    // when accessOrder = true
    // get操作会将该节点移到链表尾部,保证链表尾部是最近访问的节点,链表head节点就是最久未使用的节点
    // put操作会将该节点移到链表尾部,保证链表尾部是最近访问的节点,链表head节点就是最久未使用的节点
    // put操作后,when removeEldestEntry()方法返回为true会移除最晚的节点。就是head节点
    // removeEldestEntry()默认为false,如果为true,必须继承LinkedHashMap重写这个方法。
    // 实例:实现LRU缓存,通过移除最近最久未使用的节点。从而保证缓存空间足够。并且缓存的数据都是热点数据
  • 相关阅读:
    Django之使用内置函数和celery发邮件
    Django之FBV和CBV的用法
    使用xampp将angular项目运行在web服务器
    Django之使用中间件解决前后端同源策略问题
    Spring cloud Feign 调用端不生效
    进程同步——哲学家进餐问题Java实现
    数据库事务四大特性、隔离级别
    B树 B+树 红黑树
    SpringCloud Config Bus webhook 只能刷新config server 不能刷新config client
    Java8 容器类详解
  • 原文地址:https://www.cnblogs.com/czsblog/p/11156102.html
Copyright © 2011-2022 走看看