HashMap中的 keySet() 方法
- 返回映射中所包含的键的 set 视图,
- 返回类型为 Set 。如果只查询 HashMap 中的所有键,可以用到这个方法。
entrySet()
- 返回此映射所包含的映射关系(映射关系是指键值对)的 collection 视图
- 在返回的集合中,每个元素都是一个Map.Entry。
- 与keySet()不同的是,keySet只返回所有的键。 而entrySet则返回的是键值对,不仅包含键,还包括键的值。
Map的四种遍历方式
1.for each map.entrySet()
|
|
2.显示调用map.entrySet()的集合迭代器
|
|
3.for each map.keySet(),再调用get获取
|
|
4.for each map.entrySet(),用临时变量保存map.entrySet()
|
|
HashMap遍历方式比较
试验得,第三种方式(for each map.keySet(),再调用get获取)最耗时,性能最差。
来看 HashMap entrySet 和 keySet 的源码:
|
|
分别是keySet()和entrySet()返回的set的迭代器,从中我们可以看到只是返回值不同而已,父类相同,所以性能相差不多。
但是,第三种方式,多了一步根据key get得到value的操作。
get(key) 的时间复杂度根据hash算法而异,源码如下:
|
|
get 的时间复杂度取决于for循环循环次数,即hash算法。
总结
从上面的分析来看:
HashMap的循环,如果既需要key也需要value,直接用:
|
|
如果只是遍历 key 而无需 value 的话,可以用:
|
|