首页 > 其他 > 详细

LinkedHashMap实现LRU

时间:2021-07-09 16:31:38      阅读:20      评论:0      收藏:0      [点我收藏+]

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();
    }
    
    
}

LinkedHashMap实现LRU

原文:https://www.cnblogs.com/yiweiblog/p/14990058.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!