兩大foreach方式
目前測試的結(jié)果 foreach 與 顯示調(diào)用 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 當(dāng)獲取key 或這value的是時候,其實就是取其中的屬性,因此性能是相對較高的。
- map.keySet()
Map<String, String> map = new HashMap<String, String>();
for (String key : map.keySet()) {
map.get(key);
}
- 分析
keySet() 返回的也是set的迭代器,但是其中只有key的集合內(nèi)容,當(dāng)需要獲取value時,還需要主動調(diào)用 map.get(key),此時的迭代效率就相當(dāng)?shù)穆?,其效率的高低,get的時間復(fù)雜度根據(jù)hash算法而異。
- 總結(jié)
視需求來定, 需要key 和 value的值,還是使用第一種比較好,只需要key的,還是使用第二種。
純屬個人理解。