java map遍歷方式及效率


本文轉載自Java Map遍歷方式的選擇

只給出遍歷方式及結論。測試數據可以去原文看。

如果你使用HashMap

  1. 同時遍歷key和value時,keySet與entrySet方法的性能差異取決於key的復雜度,總體來說還是推薦使用entrySet。換言之,取決於HashMap查找value的開銷。entrySet一次性取出所有key和value的操作是有性能開銷的,當這個損失小於HashMap查找value的開銷時,entrySet的性能優勢就會體現出來。例如上述對比測試中,當key是最簡單的數值字符串時,keySet可能反而會更高效,耗時比entrySet少10%。總體來說還是推薦使用entrySet。因為當key很簡單時,其性能或許會略低於keySet,但卻是可控的;而隨着key的復雜化,entrySet的優勢將會明顯體現出來。當然,我們可以根據實際情況進行選擇
  2. 只遍歷key時,keySet方法更為合適,因為entrySet將無用的value也給取出來了,浪費了性能和空間。在上述測試結果中,keySet比entrySet方法耗時少23%。
  3. 只遍歷value時,使用vlaues方法是最佳選擇,entrySet會略好於keySet方法。

在不同的遍歷寫法中,推薦使用如下寫法:

for (String key : map.keySet()) {

}
只遍歷key
for (String value : map.values()) {

}
只遍歷value
for (Entry<String, String> entry: map.entrySet()) {

    key = entry.getKey();

    value = entry.getValue();

}
key和value都遍歷

如果你使用TreeMap

  1. 同時遍歷key和value時,entrySet的性能遠遠高於keySet。這是由TreeMap的查詢效率決定的,也就是說,TreeMap查找value的開銷較大,明顯高於entrySet一次性取出所有key和value的開銷。因此,遍歷TreeMap時強烈推薦使用entrySet方法。
  2. 只遍歷key時,keySet方法更為合適,因為entrySet將無用的value也給取出來了,浪費了性能和空間。在上述測試結果中,keySet比entrySet方法耗時少24%。
  3. 只遍歷value時,使用vlaues方法是最佳選擇,entrySet也明顯優於keySet方法。

在不同的遍歷寫法中,推薦使用如下寫法:

for (String key : map.keySet()) {

}
只遍歷key
for (String value : map.values()) {

}
只遍歷value
for (Entry<String, String> entry: map.entrySet()) {

    key = entry.getKey();

    value = entry.getValue();

}
key和value都遍歷

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM