文档章节

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>

© 著作权归作者所有

共有 人打赏支持
郑龙飞

郑龙飞

粉丝 50
博文 48
码字总数 60737
作品 0
邯郸
程序员
LinkedHashMap的最近最少使用(LUR)算法实践

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

小克898
2014/02/27
0
0
Image-Loader LruMemoryCache

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

范大脚脚
2017/11/15
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

没有更多内容

加载失败,请刷新页面

加载更多

Linux命令备忘录: jobs 显示Linux中的任务列表及任务状态命令

jobs命令用于显示Linux中的任务列表及任务状态,包括后台运行的任务。该命令可以显示任务号及其对应的进程号。其中,任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的...

开元中国2015
44分钟前
1
0
springboot Whitelabel Error Page(Not Found)解决方案

当出现上图图的错误时注意 报错信息 There was an unexpected error (type=Not Found, status=404). Not Found代表未访问到资源 解决方案:比较访问路径和代码的路径有没有写错 正确的访问路...

斩神魂
44分钟前
1
0
记一次hbase master停止服务的原因以及恢复

在Hdfs空间不足的情况下,拒绝写入,hbase会down掉。如果hdfs空间没有清理的情况下,重新启动hbase,会报splitlog失败,原因是wal日志重写过程中会写hdfs,写不进去导致的。重启不成功。 解决...

PageYi
48分钟前
1
0
如何从平面设计转行到UI设计?

时代的变迁,科技的进步,工具的发展,薪资的差距,促使许多人转行的原因,但平面与界面两者之间有着哪些的差异呢?如果,想要转行又该具备哪些条件呢? 平面、界面设计之间的差异性 平面设计...

mo311
51分钟前
4
0
线程池整理

一般在生产环境中,我们都不会直接new一个Thread,然后再去start(),因为这么做会不断频繁的创建线程,销毁线程,过大的线程会耗尽CPU和内存资源,大量的垃圾回收,也会给GC带来压力,延长GC停顿时间...

算法之名
53分钟前
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部