李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 每日心情
  • Now
  • 系列文章
  • 论坛
  • 左邻右舍
    • 左邻右舍
    • 博友圈
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于我
    • 网站地图
    • 网站统计
    • 另一个网站
    • 我的导航站
    • 赞助
  • 🚇开往
Destiny
自是人生长恨水长东
  1. 首页
  2. 转载
  3. 技术
  4. 正文

Java之五种遍历Map集合的方式

2021年2月19日 约 915 字4 分钟 117 1 0
本文最后更新于 2021年2月19日,距今已 2027 天,其中的信息可能已经发生变化,请注意甄别。

摘要:在java中所有的map都实现了Map接口,因此所有的Map都可以用以下的方式去遍历。

在java中所有的map都实现了Map接口,因此所有的Map都可以用以下的方式去遍历。这篇文章主要给大家介绍了关于Java中遍历Map集合的5种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面一起学习学习吧。

方式一 通过Map.keySet使用iterator遍历

@Test
public void testHashMap1() {
    Map<Integer, String> map = new HashMap<>();
    map.put(001, "Java");
    map.put(002, "数据库");
    map.put(003, "Vue");
    System.out.println(map);

    // 通过Map.keySet使用iterator遍历key,然后通过key得到对应的value值
    Iterator<Integer> iterator = map.keySet().iterator();
    while (iterator.hasNext()) {
        Integer key = iterator.next();
        String value = map.get(key);
        System.out.println("key = " + key + ", value = " + value);
    }
}

结果:

{1=Java, 2=数据库, 3=Vue}
key = 1, value = Java
key = 2, value = 数据库
key = 3, value = Vue

方式二 通过Map.entrySet使用iterator遍历

@Test
public void testHashMap2() {
    Map<Integer, String> map = new HashMap<>();
    map.put(001, "Java");
    map.put(002, "数据库");
    map.put(003, "Vue");
    System.out.println(map);

    // 通过Map.entrySet使用iterator遍历key和value;注意 Set entrySet():返回所有key-value对构成的Set集合
    Iterator<Map.Entry<Integer, String>> entries = map.entrySet().iterator();
    while (entries.hasNext()) {
        Map.Entry<Integer, String> entry = entries.next();
        System.out.println(entry);
    }
}

结果:

{1=Java, 2=数据库, 3=Vue}
1=Java
2=数据库
3=Vue

方式三 通过Map.keySet遍历

@Test
public void testHashMap3() {
    Map<Integer, String> map = new HashMap<>();
    map.put(001, "Java");
    map.put(002, "数据库");
    map.put(003, "Vue");
    System.out.println(map);

    // 通过Map.keySet遍历key,然后通过key得到对应的value值
    for (Integer key : map.keySet()) {
        System.out.println("key = " + key + ", value = " + map.get(key));
    }
}

结果:

{1=Java, 2=数据库, 3=Vue}
key = 1, value = Java
key = 2, value = 数据库
key = 3, value = Vue

方式四 通过For-Each迭代entries,使用Map.entrySet遍历

@Test
public void testHashMap4() {
    Map<Integer, String> map = new HashMap<>();
    map.put(001, "Java");
    map.put(002, "数据库");
    map.put(003, "Vue");
    System.out.println(map);

    // 使用For-Each迭代entries,通过Map.entrySet遍历key和value
    for (Map.Entry<Integer, String> entry : map.entrySet()) {
        System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
    }
}

结果

{1=Java, 2=数据库, 3=Vue}
key = 1, value = Java
key = 2, value = 数据库
key = 3, value = Vue

方式五 使用lambda表达式forEach遍历

@Test
public void testHashMap5() {
    Map<Integer, String> map = new HashMap<>();
    map.put(001, "Java");
    map.put(002, "数据库");
    map.put(003, "Vue");
    System.out.println(map);

  // 使用lambda表达式forEach遍历
    map.forEach((k, v) -> System.out.println("key = " + k + ", value = " + v));
}

forEach 源码

default void forEach(BiConsumer<? super K, ? super V> action) {
    Objects.requireNonNull(action);
    for (Map.Entry<K, V> entry : entrySet()) {
        K k;
        V v;
        try {
            k = entry.getKey();
            v = entry.getValue();
        } catch(IllegalStateException ise) {
            // this usually means the entry is no longer in the map.
            throw new ConcurrentModificationException(ise);
        }
        action.accept(k, v);
    }
}

从源码可以看到,这种新特性就是在传统的迭代方式上加了一层壳,但是让代码变得更加简单。(开发中推荐使用)

总结

推荐使用 entrySet 遍历 Map 类集合 KV (文章中的第四种方式),而不是 keySet 方式进行遍历。

keySet 其实是遍历了 2 次,第一次是转为 Iterator 对象,第二次是从 hashMap 中取出 key 所对应的 value值。而 entrySet 只是遍历了一次,就把 key 和 value 都放到了 entry 中,效率更高。

values()返回的是 V 值集合,是一个 list 集合对象;keySet()返回的是 K 值集合,是一个 Set 集合对象;entrySet()返回的是 K-V 值组合集合。

如果是 JDK8,推荐使用Map.forEach 方法(文章中的第五种方式)。

 

本文转载自作者: 扬帆向海   原文链接: https://zhangxy.blog.csdn.net/article/details/113336560

参考链接

2
  1. 1扬帆向海 zhangxy.blog.csdn.net
  2. 2zhangxy.blog.csdn.netzhangxy.blog.csdn.net
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/transport/2490

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

Java之五种遍历Map集合的方式

也可使用浏览器菜单中的「分享」功能

微信扫一扫分享

标签: JAVA Map
最后更新:2021年2月19日

岁月同一天 9 月 9 日

回望过去的今天,你在写什么

  • 5 年前 2021年9月9日
    百度的索引量数据现在有点儿太夸张了吧?

    咱的小破站怎么可能有这么多的索引量…… 是不是谁给咱洗数据了? :huaji3: 

相关文章
  • 属性名称闹的一场乌龙事件2025年6月23日
  • JAVA关键字之volatile关键字说明2019年10月11日
  • IDEA下载源码报:Cannot connect to the Maven process. Try again later.2022年4月11日
  • SpringBoot 中内置的 49 个常用工具类2025年5月26日
  • 项目中不用 redis 分布式锁,怎么防止用户重复提交?2025年9月3日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复

文章评论

还没有评论,快来抢沙发吧~

桃李春风一杯酒,江湖夜雨十年灯。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
关于使用AI的一些思考 book-to-skill:GitHub2.7万star开源项目,将书籍蒸馏为Agent可调用技能 最近厄尔尼诺现象越来越猛了 Kratos-plus v1.1.20版本更新说明 实用skills介绍之:Ponytail Agent & Skill 编写技巧完全指南
给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能Kratos+ v1.1.16版本更新说明AI时代,个人技术博客的出路在哪里?增加了两套复古皮肤-牛皮纸、千禧网页写了一个订阅每日新闻的WP插件WordPress缓存插件WP Fastest Cache、WP Rocket 、FlyingPress对比
基于Java8的Either类 WordPress自定义文章类型支持古腾堡编辑器(Gutenberg)的方法 Java之五种遍历Map集合的方式 9.9元解锁AI编程新体验:Doubao-Seed-Code 深度实测 Redis中缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 HandlerMethodArgumentResolver解析
最近评论
blank
李锋镝 发布于 2 小时前(09月08日) 主要是看见这个配色想要,看见那个配色想要,干脆就都加里面了
blank
威言威语 发布于 3 小时前(09月08日) 配色是挺丰富~
blank
李锋镝 发布于 12 小时前(09月08日) 让AI根据代码提交记录组织一下,给AI定一个规则,然后就轻松了
blank
李锋镝 发布于 12 小时前(09月08日) 期待吧~
blank
林羽凡 发布于 13 小时前(09月08日) 大佬就是大佬,更新日志都能写这么详细,我每次都头疼怎么写更新日志,我的表达力太差了。
标签聚合
多线程 分布式 SpringBoot Claude 日常 架构 Redis JAVA AI Spring JVM WordPress AI编程 K8s 数据库 SQL MQ MySQL ElasticSearch IDEA
友情链接
  • Serendipity
  • Mr.Sun的博客
  • 临窗旋墨
  • 九仞之行
  • 若梦博客
  • 老张博客
  • 韩小韩博客
  • 皮皮社
  • 彬红茶日记
  • 韩情脉脉
  • 蜗牛工作室
  • 林羽凡
  • 哥斯拉
  • sssr7844的博客
  • 搬砖日记
  • 志文工作室
  • Honesty
  • 瓦匠个人小站
  • 知向前端
  • 懋和道人

COPYRIGHT © 2026 lifengdi.com. ALL RIGHTS RESERVED.

正在博友圈履约中

Domain age badge for lifengdi.com

Theme Kratos-plus By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号