10 行 Java 代码实现 LRU 缓存 (整理自网络)

最近最少使用缓存的回收

为了实现缓存回收,我们需要很容易做到:

  • 查询出最近最晚使用的项
  • 给最近最少使用的项做一个标记

链表可以实现这两个操作。检测使用最近最少使用的项只需要返回链表的尾部。标记一项为最近最少使用的项只需要从当前位置移除而后将该项放置到链表头部。比较困难的事情是怎么快速的在链表中找到该项。

哈希表的帮助

看一下我们工具箱中的数据结构,哈希表可以在(消耗)常量的时间内索引到某个对象。如果我们创建一个形如 key -> 链表节点 的哈希表,我们就能在常量时间内找到最近使用的节点。更甚的是,我们也能够在常量时间内判断节点是否存在。找到这个节点后,我们就能将这个节点移动到链表的最前端了,标记为最近使用的项。

Java 捷径

很少有一种编程语言的标准库中有通用的数据结构能提供上述功能的。这是一种混合的数据结构,我们需要在哈希表的基础上建立一个链表。但是 Java 已经为我们提供了这种形式的数据结构LinkedHashMap,它甚至提供可覆盖回收策略的方法 removeEldestEntry。唯一需要我们注意的事情是,该链表的顺序是插入的顺序,而不是访问的顺序。但是,有一个构造函数提供了一个选项,可以使用访问顺序。

代码示例:

import java.util.LinkedHashMap;
import java.util.Map;public LRUCache extends LinkedHashMap {private int cacheSize;public LRUCache(int cacheSize) {super(16, 0.75, true);this.cacheSize = cacheSize;}protected boolean removeEldestEntry(Map.Entry eldest) {return size() >= cacheSize;}
}

示例完毕。

转载于:https://www.cnblogs.com/flotang/p/9962111.html

10 行 Java 代码实现 LRU 缓存相关推荐

  1. 只用120行Java代码写一个自己的区块链

    区块链是目前最热门的话题,广大读者都听说过比特币,或许还有智能合约,相信大家都非常想了解这一切是如何工作的.这篇文章就是帮助你使用 Java 语言来实现一个简单的区块链,用不到 120 行代码来揭示区 ...

  2. 10行 python 代码做出哪些酷炫的事情?

    来源 | Python小二 Python凭借其简洁的代码,赢得了许多开发者的喜爱.因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环,Python可以凭借更加简短的代码实现许多有趣的 ...

  3. php公告滚动源码,10行js代码实现上下滚动公告效果方法

    本文主要给大家介绍了关于利用10行js代码实现滚动公告效果的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧.希望能帮助到大家 ...

  4. 获取clientheight为0_用10行python代码获取全国城市交通生活圈

    今天在网上冲浪看到一个很花哨的数据,全国各城市主要商圈从早上6点到晚上10点的20min,30min,45min,60min,90min生活圈轮廓. 1 获取思路 按下F12 按下F12,点击淮海路可 ...

  5. java2048小游戏源码及解析_200行java代码实现2048小游戏

    本文实例为大家分享了java实现2048小游戏的具体代码,供大家参考,具体内容如下 效果图: 游戏介绍: 1.2048是一款益智类小游戏,刚开始随机出现两个数字,可以上下左右控制数字的移动. 2.当选 ...

  6. 10 行 Python 代码能实现哪些有趣功能?

    大家好,我是菜鸟哥 Python凭借其简洁的代码,赢得了许多开发者的喜爱.因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环,Python可以凭借更加简短的代码实现许多有趣的操作.下 ...

  7. c语言将图像转换成字符画,25行Java代码将普通图片转换为字符画图片和文本的实现...

    本文主要介绍了25行Java代码将普通图片转换为字符画图片和文本的实现,分享给大家,具体如下: 原图 生成字符画文本(像素转换字符显示后,打开字符画显示相当于原图的好几倍大,不要用记事本打开,建议用n ...

  8. 10行python代码可以做哪些酷炫的事情

    前言 今天玩啥?10行代码够玩吗? Python凭借其简洁的代码,赢得了许多开发者的喜爱.因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环, Python可以凭借更加简短的代码实现 ...

  9. 10行python代码做出哪些酷炫的事情?

    大家好,我是辰哥~ Python凭借其简洁的代码,赢得了许多开发者的喜爱.因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环,Python可以凭借更加简短的代码实现许多有趣的操作.下 ...

最新文章

  1. 使用Go语言遇到的“坑”收集
  2. Halcon算子知识:optical_flow_mg
  3. 如何简单的测试kubernetes的dns add-ons是否工作正常?
  4. 可以直接考甲级吗_成人高考可以考本科吗?成人高考可以考研究生吗?
  5. HEVC/H265 HM10.0 分析(一)NALread.cpp
  6. 物联网架构----EMQ-Hook了解、连接Kafka发送消息
  7. 论文翻译:Two-phase Hair Image Synthesis by Self-Enhancing Generative Model
  8. cognos数据源配置修改oracle,Cognos 新建数据源报错(原创)
  9. The 9 Deep Learning Papers You Need To Know About (Understanding CNNs Part 3)
  10. 数据结构算法基础定义
  11. protel99se学习笔记
  12. sqlite 服务器数据库文件,sqlite可以做服务器数据库吗
  13. 精益创业实战 - 第1章 基本理念
  14. 科大奥锐干涉法测微小量实验的数据,大学物理实验报告答案大全(实验数据)
  15. DIV+CSS布局基本流程及实例介绍
  16. linux宝塔视频教程,linux 宝塔面板安装rtmp简陋教程 (已加视频版教程)
  17. 解决Centos7关闭You have new mail in /var/spool/mail/root提示
  18. 【转】搜狗开源内部项目管理平台Cynthia意欲何为
  19. Java使用Itext5与html模板生成pdf并支持下载
  20. Java图形界面设计基础

热门文章

  1. es java api 创建索引结构_elasticsearch - 如何使用ES的Java API来创建一个新类型的索引 - SO中文参考 - www.soinside.com...
  2. 【译】How to create your own Question-Answering system easily with python
  3. 技术讨论 | 一次尚未完成的薅羊毛行动
  4. oppo手机显示服务器繁忙,如何玩转OPPO R11,五大隐藏功能你必须了解
  5. JZOJ 4932. 【NOIP2017提高组模拟12.24】B
  6. python importlib_metadata_Python 动态导入对象,importlib.import_module()的使用方法
  7. 数学之美 系列八-- 贾里尼克的故事和现代语言处理
  8. Treasure Exploration
  9. 洛谷 P1955 [NOI2015]程序自动分析(沙雕题)
  10. BZOJ 4278 [ONTAK2015]Tasowanie (后缀数组)