Java遍历Map的方法汇总

 更新时间:2023年12月18日 12:00:22   作者:老鼠只爱大米  
大家平时在使用Java开发时,经常会遇到遍历Map对象的问题,本文就给大家介绍几种Java遍历Map对象的方法,并简单分析一下每种方法的效率,需要的朋友可以参考下

前言

大家平时在使用Java开发时,经常会遇到遍历Map对象的问题。本文就给大家介绍几种Java遍历Map对象的方法,并简单分析一下每种方法的效率。

首先创建一个Map对象,初始值为3条数据,用于测试代码的编写

Map<String,String> map = new HashMap<String,String>();
map.put("1","张三");
map.put("2","李四");
map.put("3","王五")

一、for循环 + Entryset

首先通过map.entrySet()方法,可以获取到一个Set集合,这个集合中的每一个元素就是Map中的一个键值对。然后通过循环遍历这个Set集合,可以依次取出每对的键和值。该方法使用了foreach循环,代码简洁明了,且能获取Map的键和值,是最常见且多数情况最可取的遍历方式。

for(Map.Entry<Integer,String> entry : map.entrySet()){
    System.out.println(entry.getKey());
    System.out.println(entry.getValue());
}

注意:for-each循环在java 5中被引入。所以该方法只能应用于java 5及以上版本。如果遍历Map是null,for-each循环将抛出NullPointerException,因此在遍历前需要检查空引用。

二、Iterator + Entryset

Entry是Map接口的内部接口,获取迭代器,然后循环依次取出每个迭代器里面的Entry,再通过Entry取出每个键值对。该种方法看起来冗余,却是老版本java中遍历map的唯一方式。第一种遍历方法其实是这种方法通过语法糖做的一种编码方式,其本质是一样的。所以在性能方面,两种方法基本相同。另外,如果在遍历过程中,有删除某些键值对的需求,需要使用这种遍历方式。

Iterator<Map.Entry<String,String>> iterator=map.entrySet().iterator();
	while(iterator.hasNext()){
	Map.Entry<String,String> entry=iterator1.next();
	System.out.println(entry.getKey());
	System.out.println(entry.getValue());
}

三、for循环 + KeySet(效率低)

通过map.keySet()方法可以获取Map的所有key的集合(set)。然后通过遍历这个Set就可以遍历到Map的key,如果想要同时遍历到Map的value,则需要进一步通过key来从Map这个集合中获取对应的value。【不推荐,只能获取key,要想获取对应的value,需要重复计算】

for (String key : map.keySet()) {
    System.out.println("key:" + key + ",");
    System.out.println("value:" + map.get(key));
}

这个代码看上去比方法二简洁,但实际上效率非常低。因为从键取值是耗时的操作(与方法一、二相比,在不同的Map实现中该方法慢了20%~200%,所以尽量避免使用。

四、Iterator + Keyset(效率低)

与第三种方法类似,只是将循环遍历换成了迭代器。性能提升微乎其微,同样不推荐使用。

Iterator<String> iterator=map.keySet().iterator();
while (iterator.hasNext()){
    String key = iterator.next();
    System.out.println(key);
    System.out.println(map.get(key));
}

五、lambda表达式

从Java8开始,Java提供了对Lambda表达式的支持,通过Lambda表达式可以使代码更简洁,这其中就包括用Lambda表达式实现遍历Map的功能。

map.forEach((key,value)->{
    System.out.println(key);
    System.out.println(value);
});

Lambda表达式的forEach方法,其实就是一种语法糖,可以让代码更加简洁,使用更加方便。查看源码,我们可以发现,这种方式也是对entrySet遍历方式的一种包装。

六、Stream流

map.entrySet().stream().forEach((Map.Entry<Integer, String> entry) -> {
    System.out.println(entry.getKey());
    System.out.println(entry.getValue());
});

总结

1.EntrySet的方式比KeySet性能要好,原因在于keySet相当于遍历了2次。

2.map.get(key)是计算密集型操作,很耗费CPU。

3.EntrySet的Iterator遍历的效率比for循环效率更好。

4.lambda 表达式和Entryset的底层原理相同,且语法更加简洁。

结论:JAVA8以下推荐使用方法一、二,JAVA8及以上,推荐使用方法五。

到此这篇关于Java遍历Map的方法汇总的文章就介绍到这了,更多相关Java遍历Map内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot启动之SpringApplication初始化详解

    SpringBoot启动之SpringApplication初始化详解

    这篇文章主要介绍了SpringBoot启动之SpringApplication初始化详解,首先初始化资源加载器,默认为null;断言判断主要资源类不能为null,否则报错,需要的朋友可以参考下
    2024-01-01
  • Java ProcessBuilder执行多次CMD命令的使用

    Java ProcessBuilder执行多次CMD命令的使用

    本文介绍了Java的ProcessBuilder类,该类用于执行外部命令,通过ProcessBuilder,我们可以在Java程序中灵活地执行多次CMD命令,并控制输入输出流以及工作目录等,感兴趣的可以了解一下
    2024-11-11
  • Mybatis处理List参数过程

    Mybatis处理List参数过程

    本文详细介绍了Mybatis处理List参数的方法,通过实体类StudentInfo示例,展示了两种不同类型的List传参查询,涵盖从前期准备SQL到Mapper接口及XML配置的全过程
    2026-05-05
  • 解决SpringBoot web项目启动后立即关闭的问题

    解决SpringBoot web项目启动后立即关闭的问题

    这篇文章主要介绍了解决SpringBoot web项目启动后立即关闭的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java使用@Transactional时常犯的N种错误

    java使用@Transactional时常犯的N种错误

    @Transactional是我们在用Spring时候几乎逃不掉的一个注解,本文主要介绍了使用 @Transactional 时常犯的N种错误,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • MyBatis-Plus 条件查询器的实现

    MyBatis-Plus 条件查询器的实现

    本文主要介绍了MyBatis-Plus 条件查询器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 基于Java实现XML文件的解析与更新

    基于Java实现XML文件的解析与更新

    配置文件可以有很多种格式,包括 INI、JSON、YAML 和 XML。每一种编程语言解析这些格式的方式都不同。本文将通过Java语言实现XML文件的解析与更新,需要的可以参考一下
    2022-03-03
  • Java使用quartz实现定时任务示例详解

    Java使用quartz实现定时任务示例详解

    这篇文章主要为大家介绍了Java使用quartz实现定时任务示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Java实现一个小说采集程序的简单实例

    Java实现一个小说采集程序的简单实例

    下面小编就为大家带来一篇Java实现一个小说采集程序的简单实例。小编觉得挺不错的, 现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • Java利用Map实现计算文本中字符个数

    Java利用Map实现计算文本中字符个数

    这篇文章主要为大家详细介绍了Java如何利用Map集合实现计算文本中字符个数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-08-08

最新评论