Java中HashMap的四种遍历方法,及效率比较

2016-12-06· 1790 次浏览
Java中HashMap的四种遍历方法,及效率比较 ## 测试代码 ``` package com.zhenzhigu.com; import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; public class MapTest { public static void main(String[] args){ HashMap<Integer, String> map = new HashMap<Integer, String>(); for (int i=0; i<40000; i++){ map.put(i, "第"+i+"个"); } //循环第一种 long t1 = System.nanoTime(); Object key[] = map.keySet().toArray(); for (int i=0; i<map.size();i++){ map.get(key[i]); } long t2 = System.nanoTime(); //循环第二种 for(Entry<Integer, String> entry:map.entrySet()){ entry.getValue(); } long t3 = System.nanoTime(); //循环第三种 Iterator<Integer> it = map.keySet().iterator(); while(it.hasNext()){ Integer ii = (Integer)it.next(); map.get(ii); } long t4 = System.nanoTime(); //循环第四种 for (Integer kk :map.keySet()){ map.get(kk); } long t5 = System.nanoTime(); System.out.println("第一种方法耗时:" + (t2-t1)/1000 + "微秒"); System.out.println("第二种方法耗时:" + (t3-t2)/1000 + "微秒"); System.out.println("第三种方法耗时:" + (t4-t3)/1000 + "微秒"); System.out.println("第四种方法耗时:" + (t5-t4)/1000 + "微秒"); } } ``` ## 结果分析 ### 测试环境 CPU:Intel酷睿i7-6700k-4.2GH 内存:DDR4-3200MH 系统:Win10-64位 JDK:1.7 x64位 ### 数据量:10 第一种方法耗时:113微秒 第二种方法耗时:34微秒 第三种方法耗时:3微秒 第四种方法耗时:2微秒(最快) ### 数据量:100 第一种方法耗时:126微秒 第二种方法耗时:44微秒 第三种方法耗时:20微秒 第四种方法耗时:19微秒(最快) ### 数据量:400 第一种方法耗时:198微秒 第二种方法耗时:76微秒 第三种方法耗时:79微秒 第四种方法耗时:78微秒 ### 数据量:1000 第一种方法耗时:336微秒 第二种方法耗时:140微秒(最快) 第三种方法耗时:210微秒 第四种方法耗时:216微秒 ### 数据量:6000 第一种方法耗时:2037微秒 第二种方法耗时:885微秒(最快) 第三种方法耗时:911微秒 第四种方法耗时:902微秒 ### 数据量:10000 第一种方法耗时:3101微秒 第二种方法耗时:5310微秒 第三种方法耗时:1386微秒 第四种方法耗时:753微秒(最快) ### 数据量:10,0000 第一种方法耗时:12195微秒 第二种方法耗时:6199微秒 第三种方法耗时:5034微秒 第四种方法耗时:4533微秒(最快) ### 数据量:40,0000 第一种方法耗时:19162微秒 第二种方法耗时:8180微秒 第三种方法耗时:10996微秒 第四种方法耗时:8023微秒(最快) ### 数据量:100,0000 第一种方法耗时:32261微秒 第二种方法耗时:11996微秒(最快) 第三种方法耗时:17357微秒 第四种方法耗时:15194微秒 ### 数据量:1000,0000 第一种方法耗时:184882微秒 第二种方法耗时:75973微秒(最快) 第三种方法耗时:106312微秒 第四种方法耗时:105031微秒 ## 结论 经测试,第三种方法和第四种方法耗时基本差不多, 当数据达到50万以上时,第二种方法的效率更高。 0-400条,第四种最快 400-6000条记录,第二种最快 6000-500000条,第四种最快 50万以上时,第二种最快 结果仅供参考,不同软硬件环境下效果会有一定差异,