Java HashMap 遍历方式性能探讨

                               Java HashMap 遍历方式性能探讨

关于HashMap的实现这里就不展开了,具体可以参考 JDK7与JDK8中HashMap的实现

JDK8之前,可以使用keySet或者entrySet来遍历HashMap,JDK8中引入了map.foreach来进行遍历。

原因:

keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value。而entrySet只是遍历了一次就把key和value都放到了entry中,效率更高。如果是JDK8,使用Map.foreach方法。

1. keySet和entrySet

1.1 基本用法

keySet:

《Java HashMap 遍历方式性能探讨》

entrySet:

《Java HashMap 遍历方式性能探讨》

源码上看:

keySet:

《Java HashMap 遍历方式性能探讨》

entrySet:

《Java HashMap 遍历方式性能探讨》

其实这里已经很明显了,当要得到某个value时,keySet还需要从HashMap中get,entrySet相比keySet少了遍历table的过程,这也是两者性能上的主要差别。

2. Map.foreach

在JDK8以后,引入了Map.foreach。

Map.foreach本质仍然是entrySet

《Java HashMap 遍历方式性能探讨》

配合lambda表达式一起使用,操作起来更加方便。

2.1 使用Java8的foreach+lambda表达式遍历Map

《Java HashMap 遍历方式性能探讨》

Reference:

  1.  http://lizhuang.iteye.com/blog/2356044

  2.  http://blog.163.com/fw_long/blog/static/51771186201392982041337/

  3.  https://yq.aliyun.com/articles/44712

    原文作者:huangshulang1234
    原文地址: https://blog.csdn.net/huangshulang1234/article/details/78504831
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞