两大foreach方式
目前测试的结果 foreach 与 显示调用 Iterator 的性能上几乎等价,因此只说明以下的两种方式。
- map.entrySet()
Map<String, String> map = new HashMap<String, String>();
for (Entry<String, String> entry : map.entrySet()) {
entry.getKey();
entry.getValue();
}
- 分析
entrySet()返回的是set的迭代器 ,其返回的entry对象中包含了 key 和 value 当获取key 或这value的是时候,其实就是取其中的属性,因此性能是相对较高的。
- map.keySet()
Map<String, String> map = new HashMap<String, String>();
for (String key : map.keySet()) {
map.get(key);
}
- 分析
keySet() 返回的也是set的迭代器,但是其中只有key的集合内容,当需要获取value时,还需要主动调用 map.get(key),此时的迭代效率就相当的慢了,其效率的高低,get的时间复杂度根据hash算法而异。
- 总结
视需求来定, 需要key 和 value的值,还是使用第一种比较好,只需要key的,还是使用第二种。
纯属个人理解。