文档章节

LinkedHashMap实现简单的LRU缓存

郑龙飞
 郑龙飞
发布于 2017/05/18 14:43
字数 404
阅读 23
收藏 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>

© 著作权归作者所有

共有 人打赏支持
郑龙飞

郑龙飞

粉丝 48
博文 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java工程师用spring boot和web3j构建以太坊区块链应用

区块链最近IT世界的流行语之一。这项有关数字加密货币的技术,并与比特币一起构成了这个热门的流行趋势。它是去中心化的,不可变的分块数据结构,这是可以安全连接和使用的密码算法。在这种结...

笔阁
3分钟前
0
0
聊聊sentinel的SentinelWebAutoConfiguration

序 本文主要研究一下sentinel的SentinelWebAutoConfiguration SentinelWebAutoConfiguration spring-cloud-alibaba-sentinel-autoconfigure-0.2.0.BUILD-SNAPSHOT-sources.jar!/org/springf......

go4it
5分钟前
0
0
java ArrayList 根据对象内的属性排序

//根据修改时间排序Comparator com = new Comparator<ReleaseInfo>() {public int compare(ReleaseInfo reInfo1, ReleaseInfo reInfo2) { //return reInfo2.getModifyTime().c......

成长中的小白
5分钟前
0
0
PowerDesigner p f m

(非原创) P:PirmaryKey 主键 F:ForeignKey 外键 M:Mandatory 强制要求(不能为空) 主键: 主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从...

森火
6分钟前
0
0
Nexus Repository Manager 搭建私有docker仓库

Nexus Repository Manager 搭建私有docker仓库 2018年05月08日 14:44:23 阅读数:115 1.下载nexus3的镜像: docker pull sonatype/nexus3 2.使用镜像启动一个容器: docker run -d --name n...

linjin200
7分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部