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

648 阅读4分钟

「这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战

前言

  大家好,大家在项目中经常使用到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集合元素输出结果如下:

图片.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集合元素输出结果如下:

图片.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集合元素输出结果如下:

图片.png

Map.values()

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

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

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

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

性能测试

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

图片.png

1000条数据执行时间如下:

图片.png

10000条数据执行时间如下:

图片.png 100000条数据执行时间如下:

图片.png 1000000 条数据执行时间如下: 图片.png 10000000 条数据执行时间如下: 图片.png 数据表格统计如下:

执行方式100条1000条10000条100000条1000000条10000000条
Map.keySet()2ms10ms54ms414ms5215ms52741ms
Iterator2ms7ms46ms417ms4735ms48822ms
Map.entrySet()2ms11ms51ms439ms4708ms48186ms
Map.values()0ms9ms41ms385ms4696ms46896ms

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

结语

  好了,以上就是总结的Map集合的遍历方式及其效率情况,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。

  作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA开发者和爱好者。公众号【Java全栈架构师】维护者,欢迎关注阅读交流。