LinkedHashMap实现LRU缓存cache机制,Kotlin

news2025/1/16 2:44:17

LinkedHashMap实现LRU缓存cache机制,Kotlin

 

LinkedHashMap的accessOrder=true后,访问LinkedHashMap里面存储的元素,LinkedHashMap就会把该元素移动到最尾部。利用这一点,可以设置一个缓存的上限值,当存入的缓存数理超过上限值后,删掉LinkedHashMap头部元素即可(因为最头部意味着没有被多少使用)。

至于删除最头部的元素,我们自己可以写代码,把最头部(第一个)元素找出来,然后删掉。但是,刚好,LinkedHashMap内部源代码实现有一个函数:

    protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
        return false;
    }

它默认返回false,如果该函数返回true,那么LinkedHashMap就会去删除头部最老的值。在代码中动态判断当前存储的元素数理是否超过缓存上限,超过就返回true,让LinkedHashMap删除最头部(最老的)值。

 

 

import java.util.LinkedHashMap

class Lru(
    initialCapacity: Int,
    loadFactor: Float,
    accessOrder: Boolean
) : LinkedHashMap<Int, String>(initialCapacity, loadFactor, accessOrder) {
    private val CACHE_LIMIT: Int = 3

    //accessOrder=true改变LinkedHashMap的存储策略
    constructor() : this(10, 0.75F, true)

    //如果当前的map尺寸大于缓存上限
    //删除最老的元素。
    override fun removeEldestEntry(eldest: MutableMap.MutableEntry<Int, String>?): Boolean {
        return size > CACHE_LIMIT
    }
}

fun main(args: Array<String>) {
    val map = Lru()
    map[1] = "A"
    map[2] = "B"
    map[3] = "C"
    println(map)
    println("-")

    //插入D后,最头的A被删除。
    println("插入D")
    map[4] = "D"
    println(map)
    println("-")

    //插入E后,最头的B被删除。
    println("插入E")
    map[5] = "E"
    println(map)
    println("-")

    println("访问C")
    println(map[3])
    println(map)
}

特意设置最多缓存3个元素,看代码运行结果:

{1=A, 2=B, 3=C}
-
插入D
{2=B, 3=C, 4=D}
-
插入E
{3=C, 4=D, 5=E}
-
访问C
C
{4=D, 5=E, 3=C}

 

 

 

Java的HashMap与LinkedHashMap异同_zhangphil的博客-CSDN博客一句话概括的说:两者最大的不同就是,HashMap不保证put进去的数据的顺序;而LinkedHashMap则保证put进去的数据的顺序。换句话也就是说,HashMap添加进去的数据顺序和遍历时的数据顺序不一定;而LinkedHashMap则保证添加时数据顺序是什么,遍历时数据顺序是什么。例如,假如在HashMap中依次、顺序添加元素:1,2,3,4,5,在遍历HashMap时输出的顺https://blog.csdn.net/zhangphil/article/details/44115629

基于Java LinkedList,实现Android大数据缓存策略_zhangphil的博客-CSDN博客import java.util.HashMap;import java.util.LinkedList;/* * 基于Java LinkedList,实现Android大数据缓存策略 * 作者:Zhang Phil * 原文出处:http://blog.csdn.net/zhangphil * * 实现原理:原理的模型认为:在LinkedList的头部元素是最旧的缓存数据,在L_android大数据缓存https://blog.csdn.net/zhangphil/article/details/44116885

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/960736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于人工兔算法优化的BP神经网络(预测应用) - 附代码

基于人工兔算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于人工兔算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.人工兔优化BP神经网络2.1 BP神经网络参数设置2.2 人工兔算法应用 4.测试结果&#xff1a;5.Matlab代…

【Unity3D】UI Toolkit容器

1 前言 UI Toolkit简介 中介绍了 UI Builder、样式属性、UQuery&#xff0c;本文将介绍 UI Toolkit 中的容器&#xff0c;主要包含 VisualElement、ScrollView、ListView、UI Toolkit&#xff0c;官方介绍详见→UXML elements reference。 2 VisualElement&#xff08;空容器&…

【C++】 C++11(右值引用,移动语义,bind,包装器,lambda,线程库)

文章目录 1. C11简介2. 统一的列表初始化2.1 &#xff5b;&#xff5d;初始化2.2 std::initializer_list 3. 声明3.1 auto3.2 decltype3.3 auto与decltype区别3.4 nullptr 4. 右值引用和移动语义4.1 左值引用和右值引用4.2 左值引用与右值引用比较4.3 右值引用使用场景和意义4.…

java+springboot+mysql校园跑腿管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的校园跑腿管理系统&#xff0c;系统包含超级管理员&#xff0c;系统管理员、用户角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理&#xff1b;用户管理&#xff08;充值&#xff09;&#xff1b;任…

自测明基/书客/欧普三款台灯,谁才是真正办公/阅读多场景适用的[全能机王]?

如果你预算有限&#xff0c;想买一个能拿来办公、阅读、写作业的光线舒适/全场景适用蓝牙耳机&#xff0c;一定要看看这篇&#xff01; 护眼台灯选不对&#xff0c;等待你的很可能是&#xff1a; 过少接触太阳光&#xff0c;影响眼部发育 光照度不稳定&#xff0c;刺眼&…

【送书福利-第十七期】用“价值”的视角来看安全:《构建新型网络形态下的网络空间安全体系》

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…

java之SpringBoot项目打包与项目启动

文章目录 第一步第二步注意事项 第一步 执行Maven构建指令package 第二步 运行项目(执行启动指令) 需要在当前包所在的位置中启动CMD命令行窗口 或者通过命令行窗口的cd指令进到包所在的位置也可以 java -jar singleFableFullStack-0.0.1-SNAPSHOT.jar注意事项 使用jar命令行启…

电磁式电压互感器直流电阻测试

试验目的 测量电磁式电压互感器直流电阻的目 的是检查其一次、 二次绕组的质量及回路的完整性&#xff0c; 以发现各种原因所造成的导线断裂、 接头开焊、 接触不良、 匝间短路等缺陷。 试验设备 变压器直流电阻测试仪 厂家&#xff1a; 湖北众拓高试 试验方法 一次绕组直流…

智慧潮涌、大牌云集,今年上海国际智能家居展迎来哪些新突破?

随着技术进步和市场发展&#xff0c;国家相继发布《关于促进家居消费若干措施的通知》等文件&#xff0c;用实际的政策支持&#xff0c;促进提升供给质量&#xff0c;创新消费场景&#xff0c;推动业态模式创新发展&#xff0c;支持企业加快智能家居产品研发。在政策红利的推动…

问道管理:暂停交易!港交所最新宣布,北向资金也受影响!大涨超180%

今日上午A股商场全体涨跌互现&#xff0c;煤炭板块涨幅居前。新股方面也体现较好&#xff0c;有一只新股盘中一度暴涨超越180%。 别的&#xff0c;飓风“苏拉”对股市也产生了影响。港交所最新公告称&#xff0c;因为八号飓风信号现正收效&#xff0c;今日&#xff08;星期五&…

如何在小程序中给会员设置备注

给会员设置备注是一项非常有用的功能&#xff0c;它可以帮助商家更好地管理和了解自己的会员。下面是一个简单的教程&#xff0c;告诉商家如何在小程序中给会员设置备注。 1. 找到指定的会员卡。在管理员后台->会员管理处&#xff0c;找到需要设置备注的会员卡。也支持对会…

React原理 - React Reconciliation-下

目录 Fiber Reconciler 【react v16.13.1】 React Fiber需要解决的问题 React Fiber的数据结构 时间分片 Fiber Reconciler 的调度 双缓冲 池概念 小节 练习 Fiber Reconciler 【react v16.13.1】 Fiber 协调 优化了栈协调的事务性弊端引起的卡顿 React Fiber需要解决…

C++之std::distance应用实例(一百八十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

基于YOLOV8模型的阶梯和工人目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOV8模型的阶梯和工人目标检测系统可用于日常生活中检测与定位工人、梯子目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算…

用深度强化学习来玩Chrome小恐龙快跑

目录 实机演示 代码实现 实机演示 用深度强化学习来玩Chrome小恐龙快跑 代码实现 import os import cv2 from pygame import RLEACCEL from pygame.image import load from pygame.sprite import Sprite, Group, collide_mask from pygame import Rect, init, time, display,…

四、高并发内存池整体框架设计

四、高并发内存池整体框架设计 现代很多的开发环境都是多核多线程&#xff0c;在申请内存的场景下&#xff0c;必然存在激烈的锁竞争问题。malloc本身其实已经很优秀&#xff0c;那么我们项目的原型TCmalloc就是在多线程高并发的场景下更胜一筹&#xff0c;所以这次我们实现的…

使用Mars3d的XyzLayer,通过zIndex使得图层叠加在最上面

问题&#xff1a;XyzLayer的温度图设置了zIndex: 999,之后&#xff0c;依然会被后加入的电子地图覆盖 // 叠加的图层 let tileLayer let tileLayer1 export function addTileLayer() { removeTileLayer() // 方式2&#xff1a;在创建地球后调用addLayer添加图层(直接new对应…

C++11——右值引用和移动语义

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;C11——右值引用 ☂️<3>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<4>前言&#xff1a;右值引用&#xff0c;是C11更新的一个非常有价值的语法&am…

kali虚拟机

kali网络配置 虚拟网络编辑器配置 打开虚拟网络编辑器&#xff0c;用管理员权限打开 打开后 VMnet0采用桥接模式&#xff0c;外部连接这边选择自己桥接的对象 控制面板可查看桥接对象 VMnet8这边选择NAT模式 VMnet1选择主机模式 因为要用到两个网卡&#xff0c; 所以我们在…

流程制造智能工厂总体架构及建设路线规划方案PPT

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除&#xff0c;更多浏览公众号&#xff1a;智慧方案文库 数字孪生智能制造(智改数转)数字化架构设计及应用..水泥智能工厂解决方案.pptx智慧制造规划设计解决方案.pptx智能工厂落…