Young's blog Young's blog
首页
Spring
  • 前端文章1

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Young

首页
Spring
  • 前端文章1

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 关于 JVM JDK 和 JRE 最详细通俗的解答
  • Java基础之讲透面向对象三大特征
  • 文件读写操作与常用技巧分享
  • 高效快捷读写文件之 RandomAccessFile 类解说
  • java的内存模型
  • 面试官:如何停止一个正在运行的线程?
  • 集合

  • linux卸载自带java JDK,安装配置java jdk环境
  • java 实现LRU 算法
  • Java
andanyang
2023-05-10

java 实现LRU 算法

LinkedHashMap 可以通过重写 removeEldestEntry 方法实现 LRU(Least Recently Used)算法。具体实现步骤如下:

  1. 创建一个 LinkedHashMap 对象,并设置 accessOrder 为 true,表示按照访问顺序排序。
  2. 重写 removeEldestEntry 方法,当 map 中的元素个数超过指定的阈值时,删除最近最少使用的元素。
  3. 在使用 map 时,每次访问一个元素时,都会将该元素移到链表的末尾,表示最近使用过。

示例代码如下:

public class LRUCache<K, V> extends LinkedHashMap<K, V> {
    private int capacity;

    public LRUCache(int capacity) {
        super(capacity, .75f, true);
        this.capacity = capacity;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        return size() > capacity;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

在使用 LRUCache 时,只需要像使用普通的 Map 一样即可,例如:

LRUCache<Integer, String> cache = new LRUCache<>(2);
cache.put(1, "a");
cache.put(2, "b");
cache.get(1);
cache.put(3, "c");
System.out.println(cache); // 输出:{1=a, 3=c}
1
2
3
4
5
6

在上述代码中,容量为 2,先放入 1 和 2 两个元素,然后访问 1,再放入 3,此时 2 就会被删除,输出结果为{1=a, 3=c}。

编辑 (opens new window)
上次更新: 2024/04/19, 08:52:45
linux卸载自带java JDK,安装配置java jdk环境

← linux卸载自带java JDK,安装配置java jdk环境

最近更新
01
idea 热部署插件 JRebel 安装及破解,不生效问题解决
04-10
02
spark中代码的执行位置(Driver or Executer)
12-12
03
大数据技术之 SparkStreaming
12-12
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Young | MIT License
浙ICP备20002744号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式