Map与Map.Entry的区别

news/2025/10/19 21:53:09/文章来源:https://www.cnblogs.com/linqr/p/19151471

Map与Map.Entry的区别


目录
  • Map与Map.Entry的区别
    • Map:键值对的集合
      • Map 的创建与本质
      • Map 的无序性
      • 对 Map 进行排序的标准流程
    • Map.Entry:键值对的“名片”
      • 功能
      • Map.Entry的作用

Map:键值对的集合

Map 的创建与本质

Map 是一种用于存储键值对(key-value)的数据结构。每个键都是唯一的,它映射到一个对应的值。

// 使用泛型创建一个 Map,例如键为 String 类型,值为 Integer 类型
Map<String, Integer> map = new HashMap<>();

它的核心思想就像一本字典:通过“单词”(key)可以快速查到它的“释义”(value)。

Map 的无序性

大多数 Map 的实现(如 HashMap)不保证元素的存储顺序。你放入元素的顺序,和遍历时取出的顺序,通常是不一致的。这种设计是为了优化查找速度。
因此,不能直接对 Map 本身进行排序。

对 Map 进行排序的标准流程

要对 Map 的内容进行排序,我们需要一个“中转站”,这个中转站就是 List。标准流程如下:

  1. 提取键值对:使用 map.entrySet() 方法,将 Map 中的所有键值对提取出来,形成一个 Set 集合。
  2. 转换为 List:将这个 Set 转换为一个 List,因为 List 是有序的,并且支持排序。
  3. 自定义排序:使用 Collections.sort()List.sort() 方法,并提供一个自定义的比较器 Comparator 来定义排序规则。
// 1. 将 Map 的所有键值对转换成一个 List
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
// 2. 使用 Collections.sort() 对 List 进行排序
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {@Overridepublic int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {// 先按值 降序 排列int valueCompare = o2.getValue().compareTo(o1.getValue());if (valueCompare != 0) {return valueCompare;}// 如果值相同,再按键 升序 排列return o1.getKey().compareTo(o2.getKey());}
});
// 现在的 list 就是有序的了,可以按顺序遍历输出
for (Map.Entry<String, Integer> entry : list) {System.out.println(entry.getKey() + ": " + entry.getValue());
}

上面的代码可以用更简洁的 Lambda 表达式来写:

List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
list.sort((e1, e2) -> {int valueCompare = e2.getValue().compareTo(e1.getValue());if (valueCompare != 0) {return valueCompare;}return e1.getKey().compareTo(e2.getKey());
});

在排序后的 list 中,数据就像 [ (key1, value1), (key2, value2), ... ] 这样有序地存储。


Map.Entry:键值对的“名片”

功能

Map.EntryMap 接口内部的一个嵌套接口。它不是 Map 本身,而是 Map单个键值对的表示。
你可以把它想象成一张“名片”或一个“包裹”,这张名片上清晰地写着:

  • getKey(): 获取键
  • getValue(): 获取值
  • Key.setValue(value): 设置值(注意,这个操作会直接修改原始 Map 中对应的值)

Map.Entry的作用

正因为 Map.Entry 可以将一个键和一个值捆绑成一个独立的对象,我们才能将它放入 List 中,并基于它的 keyvalue 来编写自定义的排序逻辑。没有它,我们就无法方便地对 Map 的内容进行排序。

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

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

相关文章

真诚

我能毫无保留的给出我的真诚,这绝非意味着它的廉价更不代表我的愚笨相反这代表我本身就很好......

申公豹说

申公豹: 我单枪匹马走到现在,任何人都不是我的靠山能折磨我的,都是我在意的,只要我不在意了,天奈我何,这个世界的规则就是,只要你放弃不要了,一切都解了,无情,可破万局.... AI:你的这段话里,既有孤绝的清…

大数据分析之MySQL学习2

一、模型和数据模型 (一)模型 是现实世界特征的模拟和抽象,例如地图、建筑设计沙盘、模型飞机、汽车模型等。 (二)数据模型(Data Model) 是现实世界数据特征的抽象,具有以下特点:从计算机实现的观点对数据建模…

[KaibaMath]1012 关于收敛数列保号性的推论的证明

[KaibaMath]1012 关于收敛数列保号性的推论的证明收敛数列保号性的推论是基于保号性定理(极限非零则后期项同号) 衍生的重要结论。下面给出证明。

CSP-S模拟赛加赛 比赛总结

CSP-S模拟赛加赛T1 T2 T3 T4100 AC 60 RE 15 TLE 37 WA总分:212;排名:4/5。 T1 A 了,T2 部分分,T3 挂了 20 分,T4 干了 1.5h,思路基本正确,码力太差细节太多,最后输出 0。 T1 Divisors 不难,不说了。 #inclu…

赛前训练 12 树的直径、中心和重心

A 树的直径板子. B 注意到树的直径有个性质:所有节点到其他点的最远距离一定在直径的端点处取到.怎么证明请查阅往期笔记. 这样,我们把直径留着,将其他点依次和端点匹配,最后加上直径的贡献就得到了第一问的答案. 那么…

我要好好写博客了 - Milo

1 目的 记录自己在编程过程中遇到的问题和想法,以及在学习新知识时的知识点 2 为什么突然想要好好经营一个博客 我很喜欢互联网的开源精神,我是2020年上的大一,在大四的时候,AI出现了。 在AI出现之前,我的几乎所有…

关于无人巡航小车的学习笔记

文件名:zmd_ws zmd为队伍名称,下横杠代替空格,ws全称为workspace,即工作空间。工作空间的分隔原理暂时不知道? 文件名:build,devel 用于存放执行catkin_make后的编译文件,也就是编译ROS(src文件夹下)包时所…

[fastgrind] 一个轻量级C++内存监控及可视化开源库

目录Fastgrind引言 简介 仓库结构 快速开始编译 testcase 运行 testcase 调用堆栈 Report如何在你的项目中使用手动插桩的使用方法 自动插桩的使用方法fastgrind 输出与分析fastgrind.text fastgrind.json可视化 fastg…

详细介绍:springboot+vue智慧旅游管理小程序(源码+文档+调试+基础修改+答疑)

详细介绍:springboot+vue智慧旅游管理小程序(源码+文档+调试+基础修改+答疑)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

iOS/Swift:深入理解iOS CoreText API

iOS/Swift:深入理解iOS CoreText API这篇文章是从0到1自定义富文本渲染的原理篇之一,此外你还可能感兴趣:一文读懂字符与编码 一文读懂字符、字形、字体 一文读懂字体文件 从0到1自定义文字排版引擎:原理篇 逆向分…

存算一体架构的先行者:RustFS在异构计算环境下的探索与实践

存算一体架构的先行者:RustFS在异构计算环境下的探索与实践随着AI大模型与边缘计算蓬勃发展,传统"存储-计算"分离架构的"存储墙"瓶颈日益凸显。本文将深入解析RustFS如何通过存算一体设计在异构…

Appium 3.0:跨平台移动自动化测试框架全面解析

Appium是一个开源的跨平台自动化测试框架,支持原生、混合、移动Web和桌面应用的测试。基于WebDriver协议,提供丰富的驱动和插件生态系统,支持多种编程语言,让移动应用测试变得更加简单高效。Appium 3.0:跨平台移动…

德国州政府全面弃用微软办公套件,改用开源方案

德国州政府全面弃用微软办公套件,改用开源方案德国州政府全面弃用微软办公套件,改用开源方案来源: OSCHINA 编辑: 局 2025-10-16 19:24:043德国石勒苏益格 - 荷尔斯泰因州宣布,已正式完成从微软 Outlook 和 Exchang…

DAPO代码实现浅析

参考verl对dapo的实现,首先咱们看一下入口.sh和.py文件,在./recipe/dapo/文件夹中有以下目录 . ├── config │ ├── dapo_megatron_trainer.yaml │ └── dapo_trainer.yaml ├── dapo_ray_trainer.py …

[KaibaMath]1011 关于收敛数列保号性的证明

[KaibaMath]1011 关于收敛数列保号性的证明收敛数列保号性是描述收敛数列的极限符号与数列“后期项”符号关系的核心性质,即极限的非零符号能“保证”数列从某一项开始的所有项与极限同号。下面给出证明。

赛前训练 12 extra 树上差分倍增

A 树上差分板子. B 每个点只有一条出边的有向图可以看作树 基于上述结论,我们直接倍增维护 \(\min,\operatorname{sum}\) 即可.实现 #include <cstdio> #include <iostream> #include <algorithm> #…

塔吊施工人员操作合规性监测!思通数科 AI 卫士实时守护作业安全

塔吊施工中,人员操作合规性是安全管理的关键环节,但传统人工监管常面临 “监管范围有限、异常难实时发现” 的痛点:作业人员是否按规范穿戴防护装备(安全帽、防护服、防护手套),靠远处观察难判断穿戴完整性(如安…

Dos命令1

常用的dos命令 我不懂

题解:P1073 [NOIP 2009 提高组] 最优贸易

题目传送门 绝世好题 让我学会了分层图的真正用法 以前都只会自作聪明地分两层: 美其名曰【正图】【反图】 现在知道了还有这种神奇的建图方法!理解题意: 有向图 给定起点终点 求路径上两点买卖东西最大收益 思路:…