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

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

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

  1. @Test
  2. public void testHashMap1() {
  3. Map<Integer, String> map = new HashMap<>();
  4. map.put(001, "Java");
  5. map.put(002, "数据库");
  6. map.put(003, "Vue");
  7. System.out.println(map);
  8.  
  9. // 通过Map.keySet使用iterator遍历key,然后通过key得到对应的value值
  10. Iterator<Integer> iterator = map.keySet().iterator();
  11. while (iterator.hasNext()) {
  12. Integer key = iterator.next();
  13. String value = map.get(key);
  14. System.out.println("key = " + key + ", value = " + value);
  15. }
  16. }

结果:

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

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

  1. @Test
  2. public void testHashMap2() {
  3. Map<Integer, String> map = new HashMap<>();
  4. map.put(001, "Java");
  5. map.put(002, "数据库");
  6. map.put(003, "Vue");
  7. System.out.println(map);
  8.  
  9. // 通过Map.entrySet使用iterator遍历key和value;注意 Set entrySet():返回所有key-value对构成的Set集合
  10. Iterator<Map.Entry<Integer, String>> entries = map.entrySet().iterator();
  11. while (entries.hasNext()) {
  12. Map.Entry<Integer, String> entry = entries.next();
  13. System.out.println(entry);
  14. }
  15. }

结果:

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

方式三 通过Map.keySet遍历

  1. @Test
  2. public void testHashMap3() {
  3. Map<Integer, String> map = new HashMap<>();
  4. map.put(001, "Java");
  5. map.put(002, "数据库");
  6. map.put(003, "Vue");
  7. System.out.println(map);
  8.  
  9. // 通过Map.keySet遍历key,然后通过key得到对应的value值
  10. for (Integer key : map.keySet()) {
  11. System.out.println("key = " + key + ", value = " + map.get(key));
  12. }
  13. }

结果:

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

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

  1. @Test
  2. public void testHashMap4() {
  3. Map<Integer, String> map = new HashMap<>();
  4. map.put(001, "Java");
  5. map.put(002, "数据库");
  6. map.put(003, "Vue");
  7. System.out.println(map);
  8.  
  9. // 使用For-Each迭代entries,通过Map.entrySet遍历key和value
  10. for (Map.Entry<Integer, String> entry : map.entrySet()) {
  11. System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
  12. }
  13. }

结果

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

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

  1. @Test
  2. public void testHashMap5() {
  3. Map<Integer, String> map = new HashMap<>();
  4. map.put(001, "Java");
  5. map.put(002, "数据库");
  6. map.put(003, "Vue");
  7. System.out.println(map);
  8.  
  9. // 使用lambda表达式forEach遍历
  10. map.forEach((k, v) -> System.out.println("key = " + k + ", value = " + v));
  11. }

forEach 源码

  1. default void forEach(BiConsumer<? super K, ? super V> action) {
  2. Objects.requireNonNull(action);
  3. for (Map.Entry<K, V> entry : entrySet()) {
  4. K k;
  5. V v;
  6. try {
  7. k = entry.getKey();
  8. v = entry.getValue();
  9. } catch(IllegalStateException ise) {
  10. // this usually means the entry is no longer in the map.
  11. throw new ConcurrentModificationException(ise);
  12. }
  13. action.accept(k, v);
  14. }
  15. }

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

总结

推荐使用 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集合的五种方式》,原文作者:王小贰 。

点击关注,第一时间了解华为云新鲜技术~

Java之五种遍历Map集合的方式的更多相关文章

  1. (1)集合 ---遍历map集合

    Map接口     实现Map接口的类用来存储键(key)-值(value) 对.Map 接口的实现类有HashMap和TreeMap等.Map类中存储的键-值对通过键来标识,所以键值不能重复. Ha ...

  2. 遍历Map集合:java.util.Map.Entry、KeySet两种方式

    遍历Map集合的两种方式: 1.用KeySet Map.keySet(),返回一个存放所有key的set集合,通过遍历集合,根据key值取出所有的value值. Map<String,Strin ...

  3. 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key, 用个数作为value,放入到map集合中,遍历map集合

    package cn.it.zuoye5; import java.io.File;import java.util.HashMap;import java.util.Iterator;import ...

  4. [集合]Map的 entrySet() 详解以及用法(四种遍历map的方式)

    Entry 由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系. Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value (我们总说键值对键值对, 每一个键值对也 ...

  5. Java中遍历Map集合的四种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  6. 遍历Map集合的几种方式

    import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entr ...

  7. 转!! Java中如何遍历Map对象的4种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  8. 【转】Java中如何遍历Map对象的4种方法

    原文网址:http://blog.csdn.net/tjcyjd/article/details/11111401 在Java中如何遍历Map对象 How to Iterate Over a Map ...

  9. (转载)Java中如何遍历Map对象的4种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

随机推荐

  1. [LeetCode]Subtree of Another Tree判断一棵树是不是另一棵树的子树

    将树序列化为字符串,空节点用符号表示,这样可以唯一的表示一棵树. 用list记录所有子树的序列化,和目标树比较. List<String> list = new ArrayList< ...

  2. SpringBoot进阶教程(六十九)ApplicationContextAware

    在某些特殊的情况下,Bean需要实现某个功能,但该功能必须借助于Spring容器才能实现,此时就必须让该Bean先获取Spring容器,然后借助于Spring容器实现该功能.为了让Bean获取它所在的 ...

  3. 使用node+puppeteer+express搭建截图服务

    使用node+puppeteer+express搭建截图服务 转载请注明出处https://www.cnblogs.com/funnyzpc/p/14222807.html 写在之前 一开始我们的需求 ...

  4. 漫谈JSON Web Token(JWT)

    一.背景 传统的单体应用基于cookie-session的身份验证流程一般是这样的: 用户向服务器发送账户和密码. 服务器验证账号密码成功后,相关数据(用户角色.登录时间等)都保存到当前会话中. 服务 ...

  5. hive 将hive表数据查询出来转为json对象和json数组输出

    一.将hive表数据查询出来转为json对象输出 1.将查询出来的数据转为一行一行,并指定分割符的数据 2.使用UDF函数,将每一行数据作为string传入UDF函数中转换为json再返回 1.准备数 ...

  6. Java中定时器Timer致命缺点(附学习方法)

    简介 这篇文章我一直在纠结到底要不要写,不想写一来因为定时器用法比较简单,二来是面试中也不常问.后来还是决定写了主要是想把自己分析问题思路分享给大家,让大家在学习过程中能够参考,学习态度我相信大部分人 ...

  7. Win Task 任务管理器 批量杀进程方法

    Example Kill All Chrome & Chrome Driver taskkill /IM chromedriver.exe /F taskkill /IM chrome.exe ...

  8. 风炫安全WEB安全学习第二十四节课 利用XSS钓鱼攻击

    风炫安全WEB安全学习第二十四节课 利用XSS钓鱼攻击 XSS钓鱼攻击 HTTP Basic Authentication认证 大家在登录网站的时候,大部分时候是通过一个表单提交登录信息. 但是有时候 ...

  9. Tensorflow--------tf.nn库

    1.tf.nn :提供神经网络相关操作,包括卷积神经(conv),池化操作(pooling),归一化,loss,分类操作,embedding,RNN,Evaluation. 2.tf.layers:高 ...

  10. CSS&&label_div

    Css-div部分 本章主要内容 0.基础知识 1.CSS概述 2.CSS基础语法 3.CSS选择器 4.CSS主要属性 5.CSS核心机制-盒子模型 6.CSS重点和难点-定位 7.综合示例 基础知 ...