本文屬於原創,原文地址在:http://www.sujunqiang.com/archives/215.html
在Java的很多實際應用和程序中,我們會遇到需要對Map進行遍歷的時候,在這裏我總結了2種對Map進行遍歷的方法,並對其中兩種方法的速度性能作了對比,總結方法以及對比如下:
(一)Map的2種遍歷方法
1)通過keySet
Map<Object, Object> map = new HashMap<Object, Object>(); for (Object key : map.keySet()) { System.out.println(map.get(key)); }
2)通過entrySet
Map<Object, Object> map = new HashMap<Object, Object>(); for (Entry<Object, Object> entry : map.entrySet()) { System.out.println(entry.getValue()); }
(二)兩種方法的性能對比
代碼如下:
package com.bobo.show; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; public class MapTest { public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); for (int i = 0; i < 100; i++) { map.put("i", (i * 10) + ""); } long nanoTime = System.nanoTime(); for (String key : map.keySet()) { map.get(key); // System.out.println(map.get(key)); } nanoTime = System.nanoTime() - nanoTime; System.out.println("keySet:" + nanoTime); nanoTime = System.nanoTime(); for (Entry<String, String> entry : map.entrySet()) { entry.getKey(); // System.out.println(entry.getKey()); } nanoTime = System.nanoTime() - nanoTime; System.out.println("entrySet:" + nanoTime); } }
過程很簡單,通過計算其遍歷時間,運行結果如圖:
可以看到兩種方法的使用時間分別爲:
keySet:178248ns
entrySet:98665ns
由於用System.currentTimeMillis()的時間都取整後爲0,所以這裏使用nanoTime進行計算.
從時間上,entrySet的速度是比keySet要快的,至於其中的原因還要看過源碼以後才知道了.
以上比較也許還有不當的地方,希望指出不足.
本文固定鏈接: http://www.sujunqiang.com/archives/215.html | 蘇駿強的博客