news 2026/4/15 6:15:37

Map的 entrySet() 方法详解及用法_map entryset

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Map的 entrySet() 方法详解及用法_map entryset

Java Map 的 entrySet() 方法详解及用法,一篇就够了!

引言

在 Java 集合框架中,Map接口的entrySet()方法是最常用且最高效的遍历方式之一。它返回 Map 中所有键值对映射关系的集合视图(Set<Map.Entry<K, V>>),通过这个视图我们可以同时访问 key 和 value,甚至在遍历过程中修改 Map 的内容。

相比keySet()(只能取 key 再 get value)和values()(只能取 value),entrySet()在需要同时操作键和值时性能更好,因为避免了重复的 key 查找操作。

掌握entrySet(),能让你写出更优雅、更高效的 Map 遍历代码!

entrySet() 方法签名与返回值

publicSet<Map.Entry<K,V>>entrySet()
  • 返回值:一个包含 Map 中所有映射关系的Set视图。
  • 每个元素是Map.Entry<K, V>类型对象,代表一个键值对。
  • 该 Set 是 Map 的后台视图(backing view):对 Set 的修改会反映到原 Map,反之亦然。
  • 不支持添加新元素(会抛 UnsupportedOperationException),但支持 remove 和 clear。

Map.Entry 接口核心方法

interfaceMap.Entry<K,V>{KgetKey();// 获取键VgetValue();// 获取值VsetValue(Vvalue);// 修改值(会同步修改原 Map)booleanequals(Objecto);inthashCode();}

重点setValue()可以直接修改 Map 中的值!

常见用法详解

用法1:增强 for 循环遍历(最常用)

Map<String,Integer>map=newHashMap<>();map.put("Apple",10);map.put("Banana",20);map.put("Orange",15);for(Map.Entry<String,Integer>entry:map.entrySet()){Stringkey=entry.getKey();Integervalue=entry.getValue();System.out.println(key+" = "+value);}

输出:

Apple = 10 Banana = 20 Orange = 15

优势:代码清晰,性能最佳(推荐!)

用法2:Iterator 显式迭代器(可安全删除元素)

Iterator<Map.Entry<String,Integer>>iterator=map.entrySet().iterator();while(iterator.hasNext()){Map.Entry<String,Integer>entry=iterator.next();if(entry.getValue()<18){iterator.remove();// 安全删除}}

关键:删除时必须用iterator.remove(),不能用map.remove(key)(会抛 ConcurrentModificationException)。

用法3:在遍历中修改值

for(Map.Entry<String,Integer>entry:map.entrySet()){// 将所有值翻倍entry.setValue(entry.getValue()*2);}System.out.println(map);// {Apple=20, Banana=40, Orange=30}

这是entrySet()的独有能力!用 keySet() 做不到这么简洁。

用法4:结合 Java 8 Lambda 表达式(现代写法)

// 遍历打印map.entrySet().forEach(entry->System.out.println(entry.getKey()+" -> "+entry.getValue()));// 修改值map.entrySet().forEach(entry->entry.setValue(entry.getValue()+100));// 过滤并收集新 MapMap<String,Integer>filtered=map.entrySet().stream().filter(entry->entry.getValue()>15).collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));

用法5:排序 Map(经典应用)

List<Map.Entry<String,Integer>>list=newArrayList<>(map.entrySet());list.sort(Map.Entry.comparingByValue(Comparator.reverseOrder()));// 按值降序// 前3名for(inti=0;i<Math.min(3,list.size());i++){System.out.println(list.get(i).getKey()+": "+list.get(i).getValue());}

三种遍历方式性能对比

方式代码复杂度性能(大 Map 时)可修改值可安全删除
entrySet()最快
keySet() + get(key)慢(重复查找)是(慎用)
values()

结论:能用entrySet()就优先用!

注意事项与常见坑

  • entrySet()返回的是视图,不是副本。修改视图 = 修改原 Map。
  • 某些 Map 实现(如 ConcurrentHashMap)在迭代时若结构发生变化仍可能抛异常,建议使用 Iterator。
  • 不支持向 entrySet 添加新元素:
    map.entrySet().add(newAbstractMap.SimpleEntry<>("new",1));// 抛 UnsupportedOperationException
  • 在多线程环境下,建议使用 ConcurrentHashMap 或外部同步。

总结:什么时候用 entrySet()

  • 需要同时访问 key 和 value → 首选 entrySet()
  • 需要在遍历中修改值 → 必须用 entrySet()
  • 需要删除元素 → 用 entrySet() + Iterator
  • 需要排序或流式处理 → entrySet() 是最佳起点

掌握了entrySet(),你就掌握了 Java Map 遍历的精髓!下次处理 Map 时,优先写:

for(Map.Entry<K,V>entry:map.entrySet()){...}

代码更简洁,性能更优秀!建议收藏本文,反复实践这几种用法,轻松进阶 Java 集合高手!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/9 10:59:02

Chataigne终极指南:轻松掌控多设备交互的艺术创作神器

Chataigne终极指南&#xff1a;轻松掌控多设备交互的艺术创作神器 【免费下载链接】Chataigne Artist-friendly Modular Machine for Art and Technology 项目地址: https://gitcode.com/gh_mirrors/ch/Chataigne Chataigne是一款专为艺术家、创作者和互动开发者设计的开…

作者头像 李华
网站建设 2026/4/12 16:23:39

WAN2.2-14B-Rapid-AllInOne:10分钟掌握AI视频创作的终极指南

还在为复杂的AI视频工具而烦恼吗&#xff1f;WAN2.2-14B-Rapid-AllInOne这款革命性的视频创作工具将彻底改变你的创作体验。作为一款集成了WAN 2.2核心架构与多种优化技术的多模态视频生成解决方案&#xff0c;它通过FP8精度优化&#xff0c;真正实现了"一个模型解决所有问…

作者头像 李华
网站建设 2026/4/9 6:19:16

Image-Adaptive-3DLUT:三步打造专业级图像色彩转换效果

Image-Adaptive-3DLUT&#xff1a;三步打造专业级图像色彩转换效果 【免费下载链接】Image-Adaptive-3DLUT Learning Image-adaptive 3D Lookup Tables for High Performance Photo Enhancement in Real-time 项目地址: https://gitcode.com/gh_mirrors/im/Image-Adaptive-3D…

作者头像 李华
网站建设 2026/4/13 23:39:58

AndroidAPS深度解析:打造智能血糖管理终极解决方案

AndroidAPS深度解析&#xff1a;打造智能血糖管理终极解决方案 【免费下载链接】AndroidAPS Opensource automated insulin delivery system (closed loop) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidAPS 价值导向&#xff1a;重新定义糖尿病管理体验 对于糖…

作者头像 李华
网站建设 2026/4/3 8:01:56

[特殊字符] 轻松实现智能家居联动:Homebridge Hue插件完整指南

&#x1f3e0; 轻松实现智能家居联动&#xff1a;Homebridge Hue插件完整指南 【免费下载链接】homebridge-hue Homebridge plugin for Hue and/or deCONZ 项目地址: https://gitcode.com/gh_mirrors/ho/homebridge-hue 想要让飞利浦Hue智能灯具与苹果HomeKit完美联动吗…

作者头像 李华
网站建设 2026/4/9 1:29:24

芝麻粒-TK完全指南:智能自动化蚂蚁森林能量助手使用教程

芝麻粒-TK完全指南&#xff1a;智能自动化蚂蚁森林能量助手使用教程 【免费下载链接】Sesame-TK 芝麻粒-TK 项目地址: https://gitcode.com/gh_mirrors/ses/Sesame-TK 芝麻粒-TK是一款专为支付宝蚂蚁森林用户打造的智能自动化工具&#xff0c;通过先进的算法和任务调度系…

作者头像 李华