綜合就幾句代碼
- 同時(shí)遍歷key和value時(shí)市咆,keySet與entrySet方法的性能差異取決于key的具體情況慢宗,如復(fù)雜度(復(fù)雜對(duì)象)犁享、離散度余素、沖突率等。換言之炊昆,取決于HashMap查找value的開銷桨吊。entrySet一次性取出所有 key和value的操作是有性能開銷的,當(dāng)這個(gè)損失小于HashMap查找value的開銷時(shí)凤巨,entrySet的性能優(yōu)勢(shì)就會(huì)體現(xiàn)出來视乐。例如上述對(duì)比測(cè)試中,當(dāng)key是最簡(jiǎn)單的數(shù)值字符串時(shí)敢茁,keySet可能反而會(huì)更高效佑淀,耗時(shí)比entrySet少10%≌妹剩總體來說還是推薦使用entrySet伸刃。因?yàn)楫?dāng)key很簡(jiǎn)單時(shí),其性能或許會(huì)略低于keySet逢倍,但卻是可控的捧颅;而隨著key的復(fù)雜化,entrySet的優(yōu)勢(shì)將會(huì)明顯體現(xiàn)出來较雕。當(dāng)然碉哑,我們可以根據(jù)實(shí)際情況進(jìn)行選擇
- 只遍歷key時(shí),keySet方法更為合適,因?yàn)閑ntrySet將無用的value也給取出來了扣典,浪費(fèi)了性能和空間妆毕。在上述測(cè)試結(jié)果中,keySet比entrySet方法耗時(shí)少23%贮尖。
- 只遍歷value時(shí)设塔,使用vlaues方法是最佳選擇,entrySet會(huì)略好于keySet方法远舅。
// 取鍵值
for(String key : map.keySet()) {
value = map.get(key);
}
// 取鍵值
for(Map.Entry<String, String> entry: map.entrySet()) {
key = entry.getKey();
value = entry.getValue();
}
// 取值
for (String value : map.values()) {
}