Part1引言
-
使用迭代器(Iterator)。
-
使用
keySet()获取键的集合,然后通过增强的 for 循环遍历键。 -
使用
entrySet()获取键值对的集合,然后通过增强的 for 循环遍历键值对。 -
使用 Java 8+ 的 Lambda 表达式和流。
entrySet进行遍历,在Java8中推荐使用Map.forEach()。给出的理由是遍历次数上的不同。-
keySet遍历,需要经过两次遍历。
-
entrySet遍历,只需要一次遍历。
其中keySet遍历了两次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value。
Part2keySet如何遍历了两次
map,keySet()所返回的Set集合中的key,然后去HashMap中拿取value的。增强for循环,for-eachmap.keySet().iterator()获取到了我们所需要看见的Iterator对象。iterator()方法1iterator()
2HashMap.KeySet#iterator()
KeyIterator对象,那么究竟是在哪里进行了遍历呢?我们接着往下看去。3HashMap.KeyIterator
-
继承了
HashIterator类。 -
实现了
Iterator接口。 -
一个
next()方法。
HashIterator类4HashMap.HashIterator
do-while循环操作,目的是找到一个第一个不为空的entry。KeyIterator是extendHashIterator对象的。这里涉及到了继承的相关概念,大家忘记的可以找相关的文章看看,或者我也可以写一篇~~dog。father这句话。Part3总结
-
使用keySet遍历,其实内部是使用了对应的
iterator()方法。 -
iterator()方法是创建了一个KeyIterator对象。 -
KeyIterator对象extendHashIterator对象。 -
HashIterator对象的构造方法中,会遍历找到第一个不为空的entry。
keySet->iterator()->KeyIterator->HashIterator
来源:juejin.cn/post/7295353579002396726
本篇文章来源于微信公众号: 架构师技术栈
微信扫描下方的二维码阅读本文

Comments NOTHING