写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。

这博客是对自己学习的一点点总结及记录,如果您对 Java算法 感兴趣,可以关注我的动态,我们一起学习。

用知识改变命运,让我们的家人过上更好的生活

文章目录

  • 方式一 通过Map.keySet使用iterator遍历
  • 方式二 通过Map.entrySet使用iterator遍历
  • 方式三 通过Map.keySet遍历
  • 方式四 通过For-Each迭代entries,使用Map.entrySet遍历
  • 方式五 使用lambda表达式forEach遍历
  • 总结

方式一 通过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和valuefor (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 方法(文章中的第五种方式)。


由于水平有限,本博客难免有不足,恳请各位大佬不吝赐教!

Java中遍历Map集合的五种方式相关推荐

  1. Java中遍历Map集合的5种方式总结

    这篇文章主要给大家介绍了关于Java中遍历Map集合的5种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值. 方式一 通过Map.keySet使用iterator遍历 ...

  2. java中遍历Map对象的四种方式

    import java.util.HashMap; import java.util.Map; /**  * 遍历Map对象 * @author xiaosongsong:  * @CreateTim ...

  3. Java中遍历Set集合的三种方法

    Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...

  4. Java中遍历Set集合的三种方法(实例代码)

    哈喽,欢迎来到小朱课堂,下面开始你的学习吧! Java中遍历Set集合的三种方法 废话不多说,直接上代码 1.迭代遍历: Set set = new HashSet(); Iterator it = ...

  5. 遍历List集合的五种方式

    遍历List集合的五种方式 //创建一个集合ArrayList<Student> alist = new ArrayList<>();//向集合中添加元素alist.add(n ...

  6. java中读取properties文件内容五种方式

    一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC ...

  7. java遍历一个map集合_Java遍历Map集合的四种方式

    Map 集合的遍历与 List 和 Set 集合不同.Map 有两组值,因此遍历时可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历.Map 以及实现 Map 的接口类(如 HashMap.Tr ...

  8. 【020期】面试官问:Java 遍历 Map 集合有几种方式?效率如何?

    >>号外:关注"Java精选"公众号,回复"2021面试题",领取免费资料!"Java精选面试题"小程序,3000+ 道面试题在 ...

  9. JAVA中的arraylist集合_java中遍历ArrayList集合的四种方式

    详细内容 ArrayList遍历:取出ArrayList集合中的数据 方式一:for循环 方式二:增强for循环:foreach 方式三:Iterator:迭代器 方式四:ListIterator:双 ...

  10. java中遍历集合_java中遍历ArrayList集合的四种方式

    ArrayList遍历:取出ArrayList集合中的数据 方式一:for循环 方式二:增强for循环:foreach 方式三:Iterator:迭代器 方式四:ListIterator:双向迭代器 ...

最新文章

  1. python列出文件夹所有文件_python-列出所有目录及子目录文件
  2. DNS and BIND
  3. python中实例方法与实例属性-Python中的类属性和实例属性以及静态方法和类方法...
  4. jmeter线程说明_4.centos下Jmeter+InfluxDB+Grafana环境的搭建1
  5. spring配置详解-模块化配置
  6. pthread_create函数 参数不匹配的问题
  7. 微服务之数据同步Porter 1
  8. 景观分析工具:arcgis中patch analysis模块
  9. mysql中两列拼接_python之Pandas读写操作mysql数据库
  10. java web 图表控件_2020 最新流行的Java Web报表工具比对
  11. 人工智能是 6G 诞生的关键!| 极客头条
  12. 阿里云centos远程连接mysql
  13. 按名次对数据进行排序cpp_面试中的排序算法(Part 3)
  14. 隐藏WIN10资源管理器中的3D对象文件夹
  15. (转)吴寿鹤:区块链中的软分叉与硬分叉详解
  16. 小米 samba linux,U-BOOT移植准备之(一)Samba服务器
  17. 3.6计算机网络(网络层概述 电路交换 报文交换 分组交换)
  18. 联想台式主机拆机教程_联想台式电脑主机怎么拆 联想b5040一体机拆机
  19. 【前端GUI】—— 网站美工必须掌握的PS知识点思维导图
  20. ACwing166数独与183靶形数独

热门文章

  1. smarty手册 分离php和html
  2. 火狐无法安装扩展_立即安装的前5个Firefox扩展
  3. 北航机试 16逆序数
  4. csrss.exe病毒查杀
  5. 计算机硬件性能指标参考
  6. HTML中的img标签无法显示图片的解决方案
  7. 费尔个人防火墙采用两种封包过滤技术
  8. Git和码云项目平台使用文档
  9. DeepStream:下一代智慧城市的视频分析
  10. 77个互联网+大学生创新创业大赛文档