【Java】LinkedHashMap (LRU)淘汰缓存的使用
文章目录
- **1. `initialCapacity`(初始容量)**
- **2. `loadFactor`(加载因子)**
- **3. `accessOrder`(访问顺序)**
- **完整参数解释示例**
- **示例验证**
LinkedHashMap 在 Java 中可维护元素插入或访问顺序,并实现 LRU 缓存,适用于有序存储数据和缓存管理场景。
在 Java 中,LinkedHashMap 的构造函数可以接受三个参数,分别是 initialCapacity、loadFactor 和 accessOrder。以下是具体含义:
1. initialCapacity(初始容量)
- 含义:指定
LinkedHashMap的初始容量,也就是可以存储的键值对的数量。 - 默认值:默认初始容量是
16。 - 工作机制:当存储的键值对数量超过容量的
loadFactor阈值时,LinkedHashMap会自动扩容。 - 设置建议:如果预估可以存储的键值对数量,可以设置为大于等于预估值。否则,系统在达到阈值时会进行扩容,可能影响性能。
示例:
new LinkedHashMap<>(16, 0.75f, true); // 初始容量为 16
2. loadFactor(加载因子)
- 含义:定义
LinkedHashMap的扩容触发条件,计算公式为: 扩容阈值=initialCapacity×loadFactor\text{扩容阈值} = \text{initialCapacity} \times \text{loadFactor} - 默认值:
0.75。 - 工作机制:当存储的键值对数量超过扩容阈值时,
LinkedHashMap会将容量增加一倍(重新哈希)。 - 设置建议:
- 较低的加载因子(如 0.5):减少冲突,但会增加内存占用。
- 较高的加载因子(如 1.0):节省内存,但会增加冲突概率,影响性能。
示例:
new LinkedHashMap<>(16, 0.75f, true); // 加载因子为 0.75,扩容阈值为 16 × 0.75 = 12
3. accessOrder(访问顺序)
- 含义:定义键值对的迭代顺序:
false(默认值):按照插入顺序排序(插入顺序)。true:按照访问顺序排序(最近访问的在后面)。
- 工作机制:如果
accessOrder设置为true,每次访问(包括get或put操作)会将该键值对移动到双向链表的尾部,从而保证最近访问的元素总是位于链表末尾。 - 使用场景:
- 如果需要实现 LRU 缓存(Least Recently Used),设置
accessOrder = true。 - 如果不需要按访问顺序排序,可以省略该参数或设置为
false。
- 如果需要实现 LRU 缓存(Least Recently Used),设置
示例:
new LinkedHashMap<>(16, 0.75f, true); // 按访问顺序排序
完整参数解释示例
LinkedHashMap<String, Integer> map = new LinkedHashMap<>(16, 0.75f, true);
initialCapacity = 16:初始可以存储最多 16 个键值对。loadFactor = 0.75f:扩容阈值为 16×0.75=1216 \times 0.75 = 12,当存储键值对超过 12 时触发扩容。accessOrder = true:按访问顺序排序,最近访问的键值对会移动到链表末尾。
示例验证
以下代码展示了 accessOrder = true 的效果:
import java.util.LinkedHashMap;
import java.util.Map;public class AccessOrderTest {public static void main(String[] args) {Map<String, Integer> map = new LinkedHashMap<>(16, 0.75f, true);map.put("A", 1);map.put("B", 2);map.put("C", 3);System.out.println("Initial: " + map);// 访问 "A"map.get("A");System.out.println("After accessing A: " + map);// 插入新元素 "D"map.put("D", 4);System.out.println("After inserting D: " + map);}
}
输出结果:
Initial: {A=1, B=2, C=3}
After accessing A: {B=2, C=3, A=1}
After inserting D: {B=2, C=3, A=1, D=4}
解释:
- 初始状态:
A -> B -> C,按照插入顺序。 - 访问
A后:B -> C -> A,A被移到链表末尾。 - 插入
D后:B -> C -> A -> D,新键值对始终追加到尾部。
相关文章:
【Java】LinkedHashMap (LRU)淘汰缓存的使用
文章目录 **1. initialCapacity(初始容量)****2. loadFactor(加载因子)****3. accessOrder(访问顺序)****完整参数解释示例****示例验证** LinkedHashMap 在 Java 中可维护元素插入或访问顺序,并…...
CancerGPT :基于大语言模型的罕见癌症药物对协同作用少样本预测研究
今天我们一起来剖析一篇发表于《npj Digital Medicine》的论文——《CancerGPT for few shot drug pair synergy prediction using large pretrained language models》。该研究聚焦于一个极具挑战性的前沿领域:如何利用大语言模型(LLMs)在数…...
《汽车维护与修理》是什么级别的期刊?是正规期刊吗?能评职称吗?
问题解答: 问:《汽车维护与修理》是不是核心期刊? 答:不是,是知网收录的正规学术期刊。 问:《汽车维护与修理》级别? 答:国家级。主管单位:中国汽车维修行业协会 …...
tomcat状态一直是Exited (1)
docker run -di -p 80:8080 --nametomcat001 你的仓库地址/tomcat:9执行此命令后tomcat一直是Exited(1)状态 解决办法: 用以下命令创建运行 docker run -it --name tomcat001 -p 80:8080 -d 你的仓库地址/tomcat:9 /bin/bash最终结果 tomcat成功启动...
消息中间件的基础概念入门
目录 一、什么是消息中间件 1.1、简介 1.2、消息中间件的主要作用 解耦合 异步通信 负载均衡 可靠性与持久性 消息路由与调度 削峰 事务支持 监控与审计 跨平台和跨语言支持 二、常用消息中间件对比 2.1、 RabbitMQ 2.1.1、特点 2.1.2、适用场景 2.2、Apache K…...
基于Web的宠物医院看诊系统设计与实现(源码+定制+开发)在线预约平台、宠物病历管理、医生诊疗记录、宠物健康数据分析 宠物就诊预约、病历管理与健康分析
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...
Excel数据叠加生成新DataFrame:操作指南与案例
目录 一、准备工作 二、读取Excel文件 三、数据叠加 四、处理重复数据(可选) 五、保存新DataFrame到Excel文件 六、案例演示 七、注意事项 八、总结 在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步的分析和处…...
Web 开发入门之旅:从静态页面到全栈应用的第一步
Web 开发入门之旅:从静态页面到全栈应用的第一步 在当今互联网飞速发展的时代,掌握 Web 开发技能已成为众多技术爱好者和职场人士的必修课。然而,对于初学者而言,面对繁杂的技术栈和庞大的学习资源,往往感到无从下手。…...
WebSocket实现分布式的不同方案对比
引言 随着实时通信需求的日益增长,WebSocket作为一种基于TCP的全双工通信协议,在实时聊天、在线游戏、数据推送等场景中得到了广泛应用。然而,在分布式环境下,如何实现WebSocket的连接管理和消息推送成为了一个挑战。本文将对比几…...
基于注意力机制的端到端合成语音检测
End-to-end Synthetic Speech Detection Based on Attention Mechanism 摘要: 五种轻量级注意力模块改为适用于语音序列的 通道注意力机制和 一维空间注意力机制 ASVspoof2019测试集的 等错误率和 最小串联检测代价函数都有所降低 池化层之前嵌入CBAM、ECA的模型测试…...
MySQL NaviCat 安装及配置教程(Windows)【安装】
文章目录 一、 MySQL 下载 1. 官网下载2. 其它渠道 二、 MySQL 安装三、 MySQL 验证及配置四、 NaviCat 下载 1. 官网下载2. 其它渠道 五、 NaviCat 安装六、 NaviCat 逆向工程 软件 / 环境安装及配置目录 一、 MySQL 下载 1. 官网下载 安装地址:https://www.m…...
微信小程序:播放音频
在小程序开发中,音频播放是一个重要的功能。本文将详细介绍小程序音频播放的相关知识点,帮助开发者更好地掌握小程序音频播放的实现方法。 一、小程序音频播放的基本流程 在小程序中,音频播放的基本流程如下: 获取音频数据&#…...
Ubuntu安装K8S
第一步: 安装docker Install Docker #注意docker是早期的名称已经过时了,因此请使用如下命令,一步到位安装docker-ce。 第二步:设置K8S源: (大陆使用aliyun源,大陆外使用google源)…...
独立同分布时,联合概率密度函数等于边缘概率密度函数乘积
在概率论中,独立同分布(i.i.d.)指的是多个随机变量既独立又服从相同的概率分布。对于一组随机变量 (X_1, X_2, \dots, X_n),若它们是独立同分布的,那么它们的联合概率密度函数 (p(x_1, x_2, \dots, x_n)) 就可以表示为…...
半导体数据分析: 玩转WM-811K Wafermap 数据集(三) AI 机器学习
前面我们已经通过两篇文章,一起熟悉了WM-811K Wafermap 数据集,并对其中的一些数据进行了调用,生成了一些统计信息和图片。今天我们接着继续往前走。 半导体数据分析: 玩转WM-811K Wafermap 数据集(二) AI…...
【.net core】【sqlsugar】时间查询示例
1、时间包含查询示例 //model.TimeInterval为时间区间参数,参数格式为2024-01-01~2025-01-01 //query为当前查询的语句内容 //为当前查询语句增加创建时间模糊搜索查询条件 query query.Where(a > ((DateTime)a.F_CreatorTime).ToString("yyyy-MM-dd HH:m…...
Kotlin 协程基础十 —— 协作、互斥锁与共享变量
Kotlin 协程基础系列: Kotlin 协程基础一 —— 总体知识概述 Kotlin 协程基础二 —— 结构化并发(一) Kotlin 协程基础三 —— 结构化并发(二) Kotlin 协程基础四 —— CoroutineScope 与 CoroutineContext Kotlin 协程…...
Java中网络编程的学习
目录 网络编程概述 网络模型 网络通信三要素: IP 端口号 通信协议 IP地址(Internet Protocol Address) 端口号 网络通信协议 TCP 三次握手 四次挥手 UDP TCP编程 客户端Socket的工作过程包含以下四个基本的步骤: 服务器程序…...
[计算机网络]一. 计算机网络概论第一部分
作者申明:作者所有文章借助了各个渠道的图片视频以及资料,在此致谢。作者所有文章不用于盈利,只是用于个人学习。 1.0推荐动画 【网络】半小时看懂<计算机网络>_哔哩哔哩_bilibili 1.1计算机网络在信息时代的作用 在当今信息时代&…...
【0393】Postgres内核 checkpointer process ③ 构建 WAL records 工作缓存区
1. 初始化 ThisTimeLineID、RedoRecPtr 函数 InitXLOGAccess() 内部会初始化 ThisTimeLineID、wal_segment_size、doPageWrites 和 RedoRecPtr 等全局变量。 下面是这四个变量初始化前的值: (gdb) p ThisTimeLineID $125 = 0 (gdb) p wal_segment_size $126 = 16777216 (gdb…...
PIPAL数据集实战:如何用Elo评分系统提升图像质量评估的准确性
PIPAL数据集实战:如何用Elo评分系统提升图像质量评估的准确性 在计算机视觉领域,图像质量评估(IQA)一直是算法研发的关键环节。随着生成对抗网络(GAN)等技术的突破,传统IQA方法逐渐暴露出局限性…...
Web Scraper插件实战:解决豆瓣电影Top250爬取乱序问题(附完整JSON配置)
Web Scraper插件实战:解决豆瓣电影Top250爬取乱序问题(附完整JSON配置) 当你第一次使用Web Scraper爬取豆瓣电影Top250榜单时,可能会遇到一个令人困惑的现象:明明页面上电影名称和简介是对应的,但爬取下来的…...
Pixel Fashion Atelier快速上手:非对称RPG菜单布局与像素按键交互详解
Pixel Fashion Atelier快速上手:非对称RPG菜单布局与像素按键交互详解 1. 项目概览 Pixel Fashion Atelier是一款基于Stable Diffusion与Anything-v5的图像生成工作站,它彻底改变了传统AI工具的界面设计理念。这款工具将复古日系RPG游戏的"明亮城…...
使用Python轻松管理Word页脚
在日常的办公自动化中,处理Word文档是许多人绕不开的环节。无论是生成报告、合同,还是制作项目文档,Word都是一个不可或缺的工具。然而,当文档数量庞大,或者需要频繁更新时,那些看似简单的重复性任务&#…...
ESXi 重置密码详细攻略(全场景覆盖)
本文详细覆盖 ESXi 所有常见场景的密码重置方法,包括「知道原密码改新密码」「忘记root密码(无vCenter)」「有vCenter管理(企业版)」,步骤拆解到每一步点击和命令输入,适配 ESXi 5.x/6.x/7.x/8.x 全版本,兼顾官方支持方法和实用非…...
Java微服务在Istio中出现“偶发503 no healthy upstream”?7分钟定位Sidecar健康检查盲区与Liveness Probe冲突真相
第一章:Java微服务在Istio中偶发503问题的现象与影响在基于Istio构建的服务网格环境中,Java微服务(尤其是采用Spring Cloud Kubernetes或原生Spring Boot Istio Sidecar部署模式)频繁出现偶发性HTTP 503 Service Unavailable响应…...
实测Qwen3-4B:256K超长上下文,处理长文档、写长文真实案例
实测Qwen3-4B:256K超长上下文,处理长文档、写长文真实案例 1. 引言:为什么关注长上下文能力 在日常工作和创作中,我们经常遇到需要处理超长文档的场景:分析上百页的PDF报告、阅读整本电子书、编写长篇技术文档等。传…...
5分钟彻底告别风扇噪音!FanControl终极静音配置完全指南
5分钟彻底告别风扇噪音!FanControl终极静音配置完全指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/…...
单片机调试:问题复现与定位的实战技巧
1. 单片机开发中的问题复现方法论在单片机项目开发过程中,遇到问题是不可避免的。作为一名从业多年的嵌入式工程师,我认为问题复现是整个调试过程中最关键的第一步。很多新手开发者常常急于解决问题,却忽略了问题复现的重要性,结果…...
2026年Java面试最常被问的1000道题目及参考答案
Java学到什么程度可以面试工作? 要达到能够面试Java开发工作的水平,需要掌握以下几个方面的知识和技能: 1. 基础扎实:熟悉Java语法、面向对象编程概念、异常处理、I/O流等基础知识。这是所有Java开发者必备的基础,也…...
