快捷搜索:  汽车  科技

jdk8 集合过滤(jdk1.8中Map遍历3种方式)

jdk8 集合过滤(jdk1.8中Map遍历3种方式)Set<Map.Entry<K V>> 包装一下,就可以当Set用了。Map 、Set 都无序的,但Map是装一对数据K V 然后JDK设计者搞出了下面类型entrySet这名字看上去就是个Set-----------------源码分析------------------------jdk设计者非常的智慧,Map本来是没有iterator方法的,设计者通过一个内部类EntrySet来让Map拥有Set的能力

jdk8 集合过滤(jdk1.8中Map遍历3种方式)(1)

背景

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

学习目标
  • 搞清楚Map的迭代器Iterator使用
  • 搞清楚Map3种迭代方式的性能
常见技巧

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

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

jdk8 集合过滤(jdk1.8中Map遍历3种方式)(2)

entrySet迭代方式

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

entrySet这名字看上去就是个Set

jdk8 集合过滤(jdk1.8中Map遍历3种方式)(3)

keySet迭代方式

jdk8 集合过滤(jdk1.8中Map遍历3种方式)(4)

values方式

jdk8 集合过滤(jdk1.8中Map遍历3种方式)(5)

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

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

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

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

jdk8 集合过滤(jdk1.8中Map遍历3种方式)(6)

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

Entry是个内部对象

jdk8 集合过滤(jdk1.8中Map遍历3种方式)(7)

jdk8 集合过滤(jdk1.8中Map遍历3种方式)(8)

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

jdk8 集合过滤(jdk1.8中Map遍历3种方式)(9)

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

jdk8 集合过滤(jdk1.8中Map遍历3种方式)(10)

jdk8 集合过滤(jdk1.8中Map遍历3种方式)(11)

jdk8 集合过滤(jdk1.8中Map遍历3种方式)(12)

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

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

jdk8 集合过滤(jdk1.8中Map遍历3种方式)(13)

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

jdk8 集合过滤(jdk1.8中Map遍历3种方式)(14)

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

1万数据

jdk8 集合过滤(jdk1.8中Map遍历3种方式)(15)

10万数据

jdk8 集合过滤(jdk1.8中Map遍历3种方式)(16)

100万数据

jdk8 集合过滤(jdk1.8中Map遍历3种方式)(17)

总结
  1. jdk1.8放心的用entrySet吧,性能测试非常完美。
  2. 把Map看成特殊的Set,把Set看成特殊的Map【原因看看源码你就发现了】。
又get到新知识的,请关注啊

程序汪汪持续输入

猜您喜欢: