HashMap最快遍歷
兩大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的,還是使用第二種。
純屬個人理解。