最近在复习Java集合类型的知识,突然发现Map的遍历问题,因为Map不是Collection,只有Collection才能使用迭代器进行遍历,但是Map的遍历方法里面又有使用迭代器去进行遍历的例子,所以研究了一下这个问题。
直接说结论:
- Map确实不是直接使用迭代器进行遍历的,本质上是将Map的键或值或者键值对转换成Set,然后调用Set的迭代器进行遍历,因为Set属于Collection。
二、Set的迭代器又是如何工作的
虽然知道了Map是通过Set的迭代器去进行遍历的,但是Set的底层不就是Map存的吗,只是Set只使用Map的key,默认将value的设为null而已,Set的迭代器又是如何工作的呢。
直接说结论:
- 因为Set使用了Map作为底层数据结构,以HashSet为例,要遍历HashSet肯定就要遍历底层的HashMap,HashSet的迭代器本质上是遍历了HashMap的底层数组,判断每个数组下标的值是否为null,不为null就遍历这条链表,直到这条链表遍历完就去找下一个数组下标,如此循环知道遍历完数组所有的下标也就完成了HashMap的遍历。