0

0

Java LinkedHashMap如何保持插入顺序

P粉602998670

P粉602998670

发布时间:2025-10-01 23:19:01

|

382人浏览过

|

来源于php中文网

原创

LinkedHashMap保持插入顺序是因在HashMap基础上增加双向链表,通过重写回调方法将节点按插入顺序链接,遍历时沿链表从头到尾访问,确保输出顺序与插入顺序一致。

java linkedhashmap如何保持插入顺序

LinkedHashMap 能保持插入顺序,是因为它在 HashMap 的基础上增加了双向链表结构。这个链表记录了元素的插入顺序,使得遍历 map 时能按添加顺序返回键值对

内部结构:哈希表 + 双向链表

LinkedHashMap 继承自 HashMap,但它额外维护了一个双向链表来连接所有节点。每个 Entry(实际是 LinkedHashMap.Node)除了有哈希表需要的 next 指针外,还有 before 和 after 指针,用于构建前后连接关系。

当你插入一个新键值对时:

  • 它会像 HashMap 一样计算 hash 并放入桶中
  • 同时把这个 Entry 添加到双向链表的末尾

插入顺序的实现机制

LinkedHashMap 重写了 HashMap 的回调方法,比如 newNodeafterNodeAccessafterNodeInsertion,通过这些钩子函数维护链表顺序。

立即学习Java免费学习笔记(深入)”;

以 put 操作为例:

  • 创建新节点时,调用 newNode(),该方法会把节点追加到链表尾部
  • 如果 key 已存在,更新值但不改变位置(默认行为)

这就保证了首次插入的顺序被完整保留。

PictoGraphic
PictoGraphic

AI驱动的矢量插图库和插图生成平台

下载

迭代时按插入顺序输出

当你使用 keySet()、entrySet() 或 values() 遍历时,迭代器会沿着双向链表从头到尾访问节点,而不是按哈希桶的物理分布顺序。

例如:

Map map = new LinkedHashMap();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.forEach((k, v) -> System.out.println(k + "=" + v));
// 输出一定是 a=1, b=2, c=3

注意访问顺序模式

LinkedHashMap 还支持另一种模式——访问顺序(access-order),可以通过构造函数开启:

Map map = new LinkedHashMap(16, 0.75f, true);

在这种模式下,每次 get 或 put 已存在的 key,该条目会被移到链表末尾,导致遍历顺序反映的是访问历史而非插入顺序。

基本上就这些。只要不启用 access-order,LinkedHashMap 就能稳定保持插入顺序,适合需要有序输出又希望有哈希表性能的场景。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

443

2023.08.02

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

74

2025.12.04

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

60

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

41

2025.11.27

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

326

2023.10.09

vb连接access数据库的方法
vb连接access数据库的方法

vb连接access数据库方法:1、使用ADO连接,首先导入System.Data.OleDb模块,然后定义一个连接字符串,接着创建一个OleDbConnection对象并使用Open() 方法打开连接;2、使用DAO连接,首先导入 Microsoft.Jet.OLEDB模块,然后定义一个连接字符串,接着创建一个JetConnection对象并使用Open()方法打开连接即可。

411

2023.10.16

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

158

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3万人学习

C# 教程
C# 教程

共94课时 | 7.8万人学习

Java 教程
Java 教程

共578课时 | 52.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号