再探Java集合系列—LinkedHashMap

LinkedHashMap 继承了 HashMap

所以LinkedHashMap也是一种k-v的键值对,并且内部是双链表的形式维护了插入的顺序

LinkedHashMap如何保证顺序插入的?

在HashMap中时候说到过HashMap插入无序的

LinkedHashMap使用了双向链表,内部的node节点包含了分别指向前驱和后驱的before和after两个指针

LinkedHashMap的特点有哪些?

  • 可以维持插入顺序
  • 保证访问顺序,通过构造函数可以设置LinkedHashMap的访问顺序,采用了LRU算法(保证最近访问的元素都在链表的末尾

底层原理

插入元素

在使用debug去put元素的时候会发现调用了HashMap的put方法,由于LinkedHashMap继承了HashMap,内部会调用put方法,

但他们的实现逻辑不相同。不同点在于调用的newNode(int hash, K key, V value, Node<K,V> e)方法不同,LinkedHashMap会调用自己内部的newNode方法

LinkedHashMap添加了双向链表去维护节点和节点之间的前后映射关系,添加了Node节点。通过源码我们发现在创建新节点的时候同步的也会创建before和after两个分别指向前驱节点和后驱节点的指针,这样保证了节点和节点之间相互之间能够非常明确


查找元素

通过get方法访问指定key,在debug断点调试的过程中发现代码并没有执行第二个if判断里的逻辑,这是为什么呢?什么时候accessOrder会为true呢?accessOrder的作用是什么?

其实我们还通过构造函数可以设置LinkedHashMap的访问顺序,其内部采用了LRU算法(最近最久未使用),每次被get的元素会放在集合的末尾,保证最近访问的元素都在链表的末尾。那怎么开启这项功能呢?

如下图,在创建LinkedHashMap对象的时候可以定义设置初始容量、加载因子以及开启顺序访问,当对象初始化成功之后accessOrder就被置为true,

上述中afterNodeAccess方法的作用是什么呢?是在访问节点后,将节点移动到链表的尾部,此时在get元素之后我们在输出集合发现顺序改变了。

删除元素和修改元素和LinkedList原理相同,修改指针的指向并且置删除位置为null

如果有想要交流的内容欢迎在评论区进行留言,如果这篇文档受到了您的喜欢那就留下你点赞+收藏+评论脚印支持一下博主~

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

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

相关文章

【Linux】 服务器优化之定时任务:自动清理日志,重启服务

文章目录 ⭐️背景&#x1f3c6;处理流程查看进程清理日志文件重启服务 &#x1f496;问题总结&#x1f44d;完整处理方案清理日志脚本自动重启服务计划任务定时清理日志文件定时重启服务 开机启动定时任务 ⭐️背景 部署在客户服务器项目无法访问&#xff0c;最后发现服务器上…

Docker 的基本概念和常用命令,应用程序开发中的实际应用。

Docker 是一种开源的容器化平台&#xff0c;能够帮助开发人员更加轻松地打包、部署和运行应用程序。以下是 Docker 的基本概念和优势&#xff1a; 基本概念&#xff1a; 镜像&#xff08;image&#xff09;&#xff1a;类似于虚拟机镜像&#xff0c;包含了应用程序运行所需的所…

CityEngine2023安装与快速入门

目录 0 引言1 安装2 CityEngine官方示例2.1 官方地址2.2 导入示例工程 3 结尾 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;CityEngine专栏&#x1f4a5; 标题&#xff1a;CityEngine2023安装与快速入门❣️ 寄语&#xff1a;书到用时方恨少&am…

Linux基础命令之网络配置管理常用命令

在Linux中&#xff0c;有许多命令可以用于网络管理。以下是一些常用的Linux网络管理相关的命令 # 1、ifconfig 这是一个常用的网络配置工具&#xff0c;可以用来查看和配置网络接口。这个命令在大多数Linux发行版中都可以使用&#xff0c;包括Ubuntu、Debian、CentOS、Fedora…

解读拼多多Q3财报:Temu崭露头角,跨境故事刚刚开场

11月28日&#xff0c;拼多多发布了2023年第三季度的业绩报告&#xff0c;季度营收688.4亿元&#xff0c;较去年同期大涨94%&#xff0c;比市场预期高出100多亿元。 截止到11月28日美股收盘&#xff0c;拼多多股价上涨18.8%&#xff0c;总市值达到1834.23亿美元。11月29日美股开…

P1025 [NOIP2001 提高组] 数的划分

暴搜 剪枝 枚举固定的位置 #include<bits/stdc.h> using namespace std; using ll long long; const int N 1e310; int n,k; int res; void dfs(int last,int sum,int cur){if(curk){if(sumn)res;return;}for(int ilast;isum<n;i)dfs(i,sumi,cur1); } int main() {c…

倒计时(JS计时器)

<script>function countDown() {document.body.innerHTML ;//清空页面内容var nowTimer new Date(); //现在时间的毫秒数var valueTimer new Date("2024-1-1 12:00"); //用户输入年份倒计时时间毫秒数var timer (valueTimer - nowTimer) / 1000; //倒计时秒…

有什么值得推荐的node. js练手项目吗?

前言 可以参考一下下面的nodejs相关的项目&#xff0c;希望对你的学习有所帮助&#xff0c;废话少说&#xff0c;让我们直接进入正题 1、 NodeBB Star: 13.3k 一个基于Node.js的现代化社区论坛软件&#xff0c;具有快速、可扩展、易于使用和灵活的特点。它支持多种数据库&…

解决:ValueError: the first two maketrans arguments must have equal length

解决&#xff1a;ValueError: the first two maketrans arguments must have equal length 文章目录 解决&#xff1a;ValueError: the first two maketrans arguments must have equal length背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在…

大数据-之LibrA数据库系统告警处理(ALM-37018 数据库用户连接数超限)

告警解释 当集群中单个CN实例上某个用户的连接数超过限制时&#xff0c;产生该告警。 告警属性 告警ID 告警级别 可自动清除 37018 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称 RoleName 产生告警的角色名称 HostName 产生告警的主机名…

如何在Ubuntu系统上安装Git

简单介绍 Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具CVS&#xff0c;Subversion 等不同&#xff0c;它采用了分布式版…

四、shell - 字符串

目录 1、单引号 2、双引号 3、拼接字符串 3.1 使用双引号拼接 3.2 使用单引号拼接 4、获取字符串长度 ​​​​​​​5、提取子字符串 ​​​​​​​6、查找子字符串 ​​​​​​​字符串是shell编程中最常用最有用的数据类型&#xff08;除了数字和字符串&#xff0…

Flutter应用程序加固的问题及解决方案

​&#x1f680;Flutter应用程序加固的问题及解决方案引言在移动应用开发中&#xff0c;为了保护应用程序的安全性&#xff0c;开发者需要对应用进行加固。在使用Flutter技术进行应用程序开发时&#xff0c;也需要注意应用程序的安全问题和加固方案。本文将介绍在Flutter应用程…

科普:什么是合同生命周期管理?

在当前&#xff0c;企业面临自身转型升级与行业数字建设的挑战&#xff0c;急需一种系统化的解决方案&#xff0c;帮助企业在自身运作方面实现降本增效&#xff0c;为拓展业务获得发展提供助力&#xff0c;而合同生命周期管理在其中就扮演着十分重要的角色。 一、合同生命周期…

[安洵杯 2019]easy_web

打开环境 img传参还有cmd img应该是base&#xff0c;先解码看看 3535352e706e67 这个好像是十六进制的&#xff0c;再解 访问一下看看&#xff0c;得到一张图片 尝试base解码&#xff0c;但是没有什么发现 再看看地址栏出现index.php,应该是要下载源码&#xff0c;但是还没有…

python音频处理wavfile VS. librosa

数据读取 ## 音频载入 import librosa from scipy.io import wavfile# wavfile wav_file demo.wav wf_sr, wf_audio wavfile.read(wav_file) # R1. wf_audio为未经归一化的原始音频采样点&#xff0c; 一般采用int16编码&#xff0c;即[-32768, 32767]# librosa # R1. 若sr不…

【紫光同创PCIE教程】——使用官方驱动在Windows下进行DMA读写操作/PIO读写操作

本原创教程由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处&#xff08;www.meyesemi.com) 紫光同创官方主推的是在linux系统下开发驱动和上层软件&#xff0c;相应地&#xff0c;官方提供了在linux一个基于GTK2…

zustand状态管理器使用汇总

1. 初步使用介绍 // 1. 安装zustand npm install zustand// 2. 创建store使用 import { create } from "zustand"; export const useBearStore create((set) > ({bears: 0, increasePopulation: () > set((state) > ({ bears: state.bears 1 })), remove…

hadoop安装

简介 Hadoop是一个开源的分布式存储和计算框架&#xff0c;最初由Apache软件基金会开发。它的发展背景可以追溯到Google的MapReduce和Google File System&#xff08;GFS&#xff09;的论文&#xff0c;这两篇论文启发了Hadoop的设计。Hadoop的主要应用场景包括大数据存…

行业追踪,2023-11-30

自动复盘 2023-11-30 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…