文档章节

LinkedHashMap实现简单的LRU缓存

郑龙飞
 郑龙飞
发布于 2017/05/18 14:43
字数 404
阅读 24
收藏 0

一般而言,缓存容量有限,不能无限存储所有数据,如果缓存满了,当需要存储新数据时,就需要一定的策略将一些老的数据清理出去,这个策略一般称为替换算法。LRU是一种流行的替换算法,它的全称是Least Recently Used,最近最少使用,它的思路是,最近刚被使用的很快再次被用的可能性最高,而最久没被访问的很快再次被用的可能性最低,所以被优先清理。

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * Created by 11 on 2017/5/18.
 */
public class LRUCache<K, V> extends LinkedHashMap<K, V> {
    private int maxEntries;

    public LRUCache(int maxEntries){
        super(16, 0.75f, true);
        this.maxEntries = maxEntries;
    }

    [@Override](https://my.oschina.net/u/1162528)
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        return size() > maxEntries;
    }
}

这个缓存可以这么用: public class Test {

public static void main(String[] args) {
    LRUCache<String,Object> cache = new LRUCache<>(3);
    cache.put("a", "abstract");
    cache.put("b", "basic");
    cache.put("c", "call");
    cache.get("a");

    cache.put("d", "call");
    System.out.println(cache);
	}
}

输出结果: {c=call, a=abstract, d=call}

参考链接:<a href="https://mp.weixin.qq.com/s?__biz=MzIxOTI1NTk5Nw==&mid=2650047357&idx=1&sn=860bdc9d32b3a4dfeb61e4233c0bd36a&chksm=8fde26afb8a9afb9a53ef9128eec05303cdd93bf81f0602660aabe5bf099bd08e3b78b5b8f0e&scene=21#wechat_redirect" target="_blank">剖析LinkedHashMap</a>

© 著作权归作者所有

共有 人打赏支持
郑龙飞

郑龙飞

粉丝 49
博文 48
码字总数 60737
作品 0
邯郸
程序员
私信 提问
Image-Loader LruMemoryCache

这段时间在研究Universal-Image-Loader 这个图片处理开源框架,这里主要分析一下它的LRU(Least Resently Used,最近最少使用算法)内存缓存的实现。 在UIL它提供的默认缓存类是LruMemoryCach...

范大脚脚
2017/11/15
0
0
LinkedHashMap的最近最少使用(LUR)算法实践

固定容量的基于最近最少使用算法的LinkedHashMap.可用作简单缓存.使用方法与LinkedHashMap一致. 利用LinkedHashMap实现简单的缓存,必须实现removeEldestEntry方法,具体参见JDK文档.另外...

小克898
2014/02/27
0
0
【Java入门提高篇】Day28 Java容器类详解(十)LinkedHashMap详解

  今天来介绍一下容器类中的另一个哈希表———》LinkedHashMap。这是HashMap的关门弟子,直接继承了HashMap的衣钵,所以拥有HashMap的全部特性,并青出于蓝而胜于蓝,有着一些HashMap没有...

弗兰克的猫
08/10
0
0
android开发常用的缓存策略详解(1)- LRU缓存策略

在android开发中我们为了提升App的性能,常用到缓存策略,特别在图片加载中,为了尽可能减少网络请求,通常会采用内存缓存和硬盘缓存的对已经加载的图片进行存储,但是由于磁盘的不能能是无限...

qq_35703234
2017/12/19
0
0
java容器源码分析(七)——LinkedHashMap

本文内容: LinkedHashMap概述 LinkedHashMap源码分析 LinkedHashMap概述 LinkedHashMap类似 于HashMap,区别在于采用迭代器迭代每个元素时,其顺序是按照插入次序或者是LRU次序。 其继承 关...

风水书生
2015/12/18
156
0

没有更多内容

加载失败,请刷新页面

加载更多

20181213 上课截图

小丑鱼00
8分钟前
0
0
nginx+php-fpm配置后页面显示空白的解决方法以及用nginx和php-fpm解决“502 Bad Gateway”问题

https://stackoverflow.com/questions/15423500/nginx-showing-blank-php-pages For reference, I am attaching my location block for catching files with the .php extension: location ~......

Yao--靠自己
15分钟前
1
0
mac 没声音

somehow不时就会出现这种情况。之前都得重启。 其实可以直接在terminal里打以下命令: sudo kextunload /System/Library/Extensions/AppleHDA.kext sudo kextload /System/Library/Extension...

dubox
31分钟前
1
0
看完让你彻底搞懂Websocket原理

作者:Ovear 链接:https://www.zhihu.com/question/20215561/answer/40316953 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 额。。最高票答案没答到点...

时刻在奔跑
46分钟前
2
0
Spring Cloud Stream消费失败后的处理策略(一):自动重试

之前写了几篇关于Spring Cloud Stream使用中的常见问题,比如: 如何处理消息重复消费 如何消费自己生产的消息 下面几天就集中来详细聊聊,当消息消费失败之后该如何处理的几种方式。不过不论...

程序猿DD
47分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部