一共四中方法,前兩種是迭代器取值,后兩種是隨機取值,循環了5000萬次,時間分別為:迭代器讀取的速度大約是隨機讀取的速度的1.5倍,數據量越大,差距越明顯。
另外,插入是讀取的100倍左右的時間(這個判定只是個大概參考)。
48138(插入)
403(迭代器讀取)
400(迭代器讀取)
653(隨機讀取)
561(隨機讀取)
package main; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; public class test { public static void main(String[] args) { int mapCount = 50000000; String tmp = ""; Map<Integer,String> testMap = new HashMap<>(); String testValue = ""; Long startTime0 = System.currentTimeMillis(); for(int i = 1;i<mapCount;i++){ tmp = testMap.put(i, testValue); } Long endTime0 = System.currentTimeMillis(); System.out.println(endTime0-startTime0); Long startTime1 = System.currentTimeMillis(); for(Entry<Integer,String> entry : testMap.entrySet()){ tmp = entry.getValue(); } Long endTime1 = System.currentTimeMillis(); System.out.println(endTime1-startTime1); Long startTime2 = System.currentTimeMillis(); Iterator<Entry<Integer, String>> it = testMap.entrySet().iterator(); while(it.hasNext()){ tmp = it.next().getValue(); } Long endTime2 = System.currentTimeMillis(); System.out.println(endTime2-startTime2); Long startTime3 = System.currentTimeMillis(); for(Integer i : testMap.keySet()){ tmp = testMap.get(i); } Long endTime3 = System.currentTimeMillis(); System.out.println(endTime3-startTime3); Long startTime4 = System.currentTimeMillis(); for(Entry<Integer,String> entry : testMap.entrySet()){ tmp = testMap.get(entry.getKey()); } Long endTime4 = System.currentTimeMillis(); System.out.println(endTime4-startTime4); } }