jdk1.8中Map遍历3种方式,100万数据性能测试报告

背景程序员实战开发中集合用的是非常非常多的,方法入参、数据转换、出参等等.学习目标搞清楚Map的迭代器iterator使用搞清楚Map3种迭代方式的性能常见技巧程序员开始学习啦,数据初始化准备Map...
jdk1.8中Map遍历3种方式,100万数据性能测试报告

背景

程序员实战开发中集合用的是非常非常多的,方法入参、数据转换、出参等等.

学习目标

  • 搞清楚Map的迭代器iterator使用
  • 搞清楚Map3种迭代方式的性能

常见技巧

程序员开始学习啦,数据初始化准备

Map跟Set是对兄弟,很多特性都相同,请看下面分析

jdk1.8中Map遍历3种方式,100万数据性能测试报告

entrySet迭代方式

这里只举例子下面分析原理,while 或foreach只是语法变化了,本质还是通过迭代器

entrySet这名字看上去就是个Set

jdk1.8中Map遍历3种方式,100万数据性能测试报告

keySet迭代方式

jdk1.8中Map遍历3种方式,100万数据性能测试报告

values方式

jdk1.8中Map遍历3种方式,100万数据性能测试报告

-----------------源码分析------------------------

jdk设计者非常的智慧,Map本来是没有iterator方法的,设计者通过一个内部类EntrySet来让Map拥有Set的能力

Map 、Set 都无序的,但Map是装一对数据K,V,然后JDK设计者搞出了下面类型

Set<Map.Entry<K,V>> 包装一下,就可以当Set用了。

jdk1.8中Map遍历3种方式,100万数据性能测试报告

通过继承AbstractSet然后就有了set的特性,把key、value封装到一个叫Map.Entry<K,V>类中完美变身,

Entry是个内部对象

jdk1.8中Map遍历3种方式,100万数据性能测试报告

jdk1.8中Map遍历3种方式,100万数据性能测试报告

keySet思路差不多,请看我截图源码

jdk1.8中Map遍历3种方式,100万数据性能测试报告

迭代器方法都差不多,都是通过nextNode()取相应数据,注意接口Iterator<泛型类型>

jdk1.8中Map遍历3种方式,100万数据性能测试报告

jdk1.8中Map遍历3种方式,100万数据性能测试报告

jdk1.8中Map遍历3种方式,100万数据性能测试报告

Set其实可以当Map来用,请看源码

他的K就是Set的元素,V是固定的一个值Object

jdk1.8中Map遍历3种方式,100万数据性能测试报告

还有很多细节请程序员没自己看JDK,

jdk1.8中Map遍历3种方式,100万数据性能测试报告

-----------性能测试报告------------------------

1万数据

jdk1.8中Map遍历3种方式,100万数据性能测试报告

10万数据

jdk1.8中Map遍历3种方式,100万数据性能测试报告

100万数据

jdk1.8中Map遍历3种方式,100万数据性能测试报告

总结

  1. jdk1.8放心的用entrySet吧,性能测试非常完美。
  2. 把Map看成特殊的Set,把Set看成特殊的Map【原因看看源码你就发现了】。

又get到新知识的,请关注啊

程序汪汪持续输入

  • 发表于 2018-07-10 11:32
  • 阅读 ( 3147 )
  • 分类:网络文章

条评论

请先 登录 后评论
不写代码的码农
小编

篇文章

作家榜 »

  1. 小编 文章
返回顶部
部分文章转自于网络,若有侵权请联系我们删除