java实现极简的LRU算法

import java.util.LinkedHashMap;
import java.util.Map;
 
/**
 * LRU (Least Recently Used) 
 */
public class LRUCache<K, V> extends LinkedHashMap<K, V> {
    /**

*/
private static final long serialVersionUID = 1L;
//缓存大小
    private int cacheSize;
 
    public LRUCache(int cacheSize) {
        //第三个参数true是关键
        super(10, 0.75f, true);
        this.cacheSize = cacheSize;
    }
 
    /**
     * 缓存是否已满
     */
    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        boolean r = size() > cacheSize;
        if(r){
            System.out.println("清除缓存key:"+eldest.getKey());
        }
        return r;
    }

 

    //测试

    public static void main(String[] args) {
        LRUCache<String, String> cache = new LRUCache<String, String>(5);
        cache.put("1", "1");
        cache.put("2", "2");
        cache.put("3", "3");
        cache.put("4", "4");
        cache.put("5", "5");
 
        System.out.println("初始:");
        System.out.println(cache.keySet());
        System.out.println("访问3:");
        cache.get("3");
        System.out.println(cache.keySet());
        System.out.println("访问2:");
        cache.get("2");
        System.out.println(cache.keySet());
        System.out.println("增加数据6,7:");
        cache.put("6", "6");
        cache.put("7", "7");
        System.out.println(cache.keySet());
    }

}

运行结果如下:

初始化:
[1, 2, 3, 4, 5]
访问3:
[1, 2, 4, 5, 3]
访问2:
[1, 4, 5, 3, 2]
增加数据6,7:
清除缓存key:1
清除缓存key:4
[5, 3, 2, 6, 7]

时间: 2024-09-20 14:37:45

java实现极简的LRU算法的相关文章

缓存淘汰算法--LRU算法

[本文转载于缓存淘汰算法--LRU算法] 1. LRU 1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是"如果数据最近被访问过,那么将来被访问的几率也更高". 1.2. 实现 最常见的实现是使用一个链表保存缓存数据,详细算法实现如下: 1. 新数据插入到链表头部: 2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部: 3. 当链表满的时候,将链表尾部的数据丢弃. 1.3. 分析 [命中率] 当

《Kotin 极简教程》第14章 使用 Kotlin DSL

第14章 使用 Kotlin DSL 最新上架!!!< Kotlin极简教程> 陈光剑 (机械工业出版社) 可直接打开京东,淘宝,当当===> 搜索: Kotlin 极简教程http://www.jianshu.com/p/35b487734339 我们在前面的章节中,已经看到了 Kotlin DSL 的强大功能.例如Gradle 的配置文件 build.gradle (Groovy),以及前面我们涉及到的Gradle Script Kotlin(Kotlin).Anko(Kotlin)

LRU算法简单例子

package com.aspboy.base.cache; /* * Created on 2004-8-18 *  *"最近最少使用算法"(LRU算法),它是将最近一段时间内最少被访问过的行淘汰出局. *因此需要为每行设置一个计数器,LRU算法是把命中行的计数器清零,其他各行计数器加1. *当需要替换时淘汰行计数器计数值最大的数据行出局. *这是一种高效.科学的算法,其计数器清零过程可以把一些频繁调用后再不需要的数据淘汰出Cache, *提高Cache的利用率. */ import

使用 LinkedHashMap 实现 LRU 算法

LinkedHashMap 源码分析 public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> 上面是 LinkedHashMap 的继承结构.然后看下构造方法: private transient Entry<K,V> header;//内部链表的头 private final boolean accessOrder;//是否按照访问的顺序排序,默认是 false pu

简单LRU算法实现缓存-update2

update1:第二个实现,读操作不必要采用独占锁,缓存显然是读多于写,读的时候一开始用独占锁是考虑到要递增计数和更新时间戳要加锁,不过这两个变量都是采用原子变量,因此也不必采用独占锁,修改为读写锁. update2:一个错误,老是写错关键字啊,LRUCache的maxCapacity应该声明为volatile,而不是transient.       最简单的LRU算法实现,就是利用jdk的LinkedHashMap,覆写其中的removeEldestEntry(Map.Entry)方法即可,如

Android图片缓存之Lru算法(二)_Android

前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小,点击查看.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发生的概率呢?之前我们一直在使用SoftReference软引用,SoftReference是一种现在已经不再推荐使用的方式,因为从 Android 2.3 (API Level 9)开始,垃圾回收器会更倾向于回收持有软引用或弱引用的对象,这让软引用变得不再可靠,所以今天我们来认识一种新的缓

百度极简新首页 百度新首页输入关键词后的效果

1月21日凌晨消息,消息人士透露, 百度 正小范围测试全新的极简首页,新首页去除了文字链接,仅保留搜索框,而各种功能入口全部被折叠至页面右上角. 所有的产品入口被折叠到右上角 百度目前的首页从2007年1月22日开始启用,上线7年来,除个别文字有所调整外,整体页面格局无任何变化,这也是百度历史上使用时间最长的一个版本. 现百度首页截图,这一版从2007年1月22日开始启用 上述消息人士向新浪科技提供的截图显示,百度新首页依旧采用蓝色色调,整个首页只保留搜索框和右上角"功能"."

百度 正小范围测试全新的极简首页,新首页去除了文字链接

1月21日凌晨消息,消息人士透露, 百度 正小范围测试全新的极简首页,新首页去除了文字链接,仅保留搜索框,而各种功能入口全部被折叠至页面右上角. 所有的产品入口被折叠到右上角 百度目前的首页从2007年1月22日开始启用,上线7年来,除个别文字有所调整外,整体页面格局无任何变化,这也是百度历史上使用时间最长的一个版本. 现百度首页截图,这一版从2007年1月22日开始启用 上述消息人士向新浪科技提供的截图显示,百度新首页依旧采用蓝色色调,整个首页只保留搜索框和右上角"功能"."

百度秘密测试极简新首页 7年旧首页或终结

中介交易 SEO诊断 淘宝客 云主机 技术大厅 百度极简新首页 百度新首页输入关键词后的效果 新浪科技讯 1月21日凌晨消息,消息人士透露,百度正小范围测试全新的极简首页,新首页去除了文字链接,仅保留搜索框,而各种功能入口全部被折叠至页面右上角. 所有的产品入口被折叠到右上角 百度目前的首页从2007年1月22日开始启用,上线7年来,除个别文字有所调整外,整体页面格局无任何变化,这也是百度历史上使用时间最长的一个版本. 现百度首页截图,这一版从2007年1月22日开始启用 上述消息人士向新浪科技