总结Map集合的遍历方式及其效率情况

简介: 总结Map集合的遍历方式及其效率情况

前言


  大家好,大家在项目中经常使用到Map集合来封装数据,正好近期也在使用,当遍历Map中的数据的时候,他们的效率是怎么样的呢,近期就进行了一下介绍。


Map


  Map供了一个更通用的元素存储方法,Map接口存储一组键值对象,提供key(键)到value(值)的映射。Map 集合中的每一个元素都包含一个键对象和一个值对象。


初始化数据


  首先为了便于介绍Map的遍历和他们的执行效率,本次测试先初始化一部分数据,本次将基于四种方式针对Map集合进行遍历,并测试他们的效率。四种方式分别是:Map.keySet()、map.entrySet()、Iterator迭代器、map.values()这四种方式进行。介绍方式,再进行性能比较。构造的测试数据如下:


Map<String, String> map = new HashMap<String, String>();
map.put("1", "掘金");
map.put("2", "代码不止");
map.put("3", "掘金不停");


Map.keySet()


  第一种介绍基于Map.keySet遍历key和value的方式遍历Map中的元素。


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

  

Map.keySet()遍历Map集合元素输出结果如下:


image.png


Iterator迭代器


  第二种方式采用Iterator迭代器使用iterator迭代器遍历key和value。测试代码如下:

Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry<String, String> entry = it.next();
    System.out.println("通过Map.entrySet.key= " + entry.getKey() + " and value= " + entry.getValue());
}

  Iterator迭代器遍历Map集合元素输出结果如下:

image.png


Map.entrySet()


第三种方式采用Map.entrySet遍历key和value的方式。测试代码如下:



for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println("通过Map.entrySet遍历.key= " + entry.getKey() + " and value= " + entry.getValue());
}

  

Map.entrySet()遍历Map集合元素输出结果如下:


image.png


Map.values()


  第四种通过Map.values()的方式遍历Map元素,通过Map.values()遍历所有的value,但不能遍历key。测试代码如下:


for (String v : map.values()) {
    System.out.println("value= " + v);
}

  

Map.values()遍历Map集合元素value值输出结果如下:


image.png


通过以上四种方式遍历Map,第四种方式只能获取到Map的value值,前三种都能获取到key和value。大家熟悉了集中遍历方式,下面进行性能测试。


性能测试


以上介绍了4种Map的遍历方式,下面针对4种遍历的方式进行性能测试。看那种遍历性能比较好、效率高。 100条数据执行时间如下:


image.png

1000条数据执行时间如下:

image.png

10000条数据执行时间如下:

image.png


100000条数据执行时间如下:

image.png


1000000 条数据执行时间如下:


image.png


10000000 条数据执行时间如下:


image.png


数据表格统计如下:

执行方式 100条 1000条 10000条 100000条 1000000条 10000000条
Map.keySet() 2ms 10ms 54ms 414ms 5215ms 52741ms
Iterator 2ms 7ms 46ms 417ms 4735ms 48822ms
Map.entrySet() 2ms 11ms 51ms 439ms 4708ms 48186ms
Map.values() 0ms 9ms 41ms 385ms 4696ms 46896ms

  

通过表格中的数量量和所使用的不同方式执行Map遍历所耗时时间的表格可以看出,在数量量小的时候,可以使用Iterator迭代器的方式效率比较高,在数据量多到一定程度之后,使用Map.entrySet()的方式能明显提升执行的效率。当然这些数据只是代码作者测试的时候产生的耗时,可能基于机器等外界条件,会有部分误差,仅供大家参考学习。


结语


  好了,以上就是总结的Map集合的遍历方式及其效率情况


目录
相关文章
|
1月前
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
20 1
|
2月前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
2月前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
1月前
|
存储 分布式计算 Java
Stream很好,Map很酷,但答应我别用toMap():Java开发中的高效集合操作
在Java的世界里,Stream API和Map集合无疑是两大强大的工具,它们极大地简化了数据处理和集合操作的复杂度。然而,在享受这些便利的同时,我们也应当警惕一些潜在的陷阱,尤其是当Stream与Map结合使用时。本文将深入探讨Stream与Map的优雅用法,并特别指出在使用toMap()方法时需要注意的问题,旨在帮助大家在工作中更高效、更安全地使用这些技术。
42 0
|
3月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
3月前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。
|
3月前
|
算法 Java 索引
【Java集合类面试四】、 描述一下Map put的过程
这篇文章详细描述了HashMap中put操作的过程,包括首次扩容、计算索引、插入数据以及链表转红黑树和可能的再次扩容。
【Java集合类面试四】、 描述一下Map put的过程
|
3月前
|
存储
|
3月前
|
安全 Java
【Java集合类面试五】、 如何得到一个线程安全的Map?
如何得到一个线程安全的Map的方法包括:使用Collections工具类将Map包装为线程安全,使用java.util.concurrent包下的ConcurrentHashMap,以及不推荐使用性能较差的Hashtable。
|
3月前
|
安全 Java
【Java集合类面试三】、Map接口有哪些实现类?
这篇文章介绍了Java中Map接口的几种常用实现类:HashMap、LinkedHashMap、TreeMap和ConcurrentHashMap,以及它们适用的不同场景和线程安全性。