Java中HashMap的四种遍历方法,及效率比较
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万以上时,第二种最快
结果仅供参考,不同软硬件环境下效果会有一定差异,