当前位置: 首页 > news >正文

Map与Map.Entry的区别

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.gsyq.cn/news/24677.html

相关文章:

  • 真诚
  • 申公豹说
  • 大数据分析之MySQL学习2
  • 赛前训练 12 树的直径、中心和重心
  • 关于无人巡航小车的学习笔记
  • iOS/Swift:深入理解iOS CoreText API
  • 存算一体架构的先行者:RustFS在异构计算环境下的探索与实践
  • 赛前训练 12 extra 树上差分倍增
  • 机器人技术新前沿:自动驾驶路径规划算法解析
  • 嗣澳——扫,墨依奥——描,希伊桉——线
  • 如果这就是人类脑海的话 雪白纸上划出血红层层痕迹 不如杀死这些记忆
  • ChatGPT From Zero To Hero - LLM学习笔记(一) - 详解
  • 基于Java+SSM+Django数字工坊课程教学网站(源码+LW+调试文档+讲解等)/数字工坊/课程教学/网站链接/在线课程/学习资源/视频教程/教育平台/数字艺术/学习网站/课程资料/ - 详解
  • 深入理解 Java和Go语法和使用场景(指南十一) - 指南
  • 深入解析:【办公类-115-04】20250920职称资料上传03——压缩课题结题报告PDF的大小(控制在200MB以内)
  • 树状数组和线段树基础
  • PWN手的成长之路-20-cgpwn2
  • 2024长城杯决赛-溯源取证1
  • [Agent] ACE(Agentic Context Engineering)和Dynamic Cheatsheet学习笔记
  • 2025年9月模拟赛整合
  • Windows 10 合并扩展磁盘分区
  • 零基础Linux快速上手03
  • habse
  • P2214 [USACO14MAR] Mooo Moo S 解题笔记
  • P1854 花店橱窗布置 解题笔记
  • 读书日记1
  • 物理AI:智能自动化的下一个前沿
  • tryhackme-预安全-网络基础知识-局域网介绍-05
  • UML图与数据流图
  • 一文读懂Schnorr签名