先创建一个最常用的HashMap,塞一万条数据,紧接着开始遍历
// 创建一个基础Map
Map<Integer, Integer> map1 = new HashMap<>();
for (int i = 0; i < 10000; i++) {
map1.put(i, i);
}
// keySet方法 利用两种不同的循环方式比较速度
long l1 = System.currentTimeMillis();
for (Integer int11:map1.keySet()
) {
System.out.println(int11);
}
System.out.println(System.currentTimeMillis()-l1 + " forEach 遍历keySet() 花费时间");
long l2 = System.currentTimeMillis();
Iterator<Integer> iterator = map1.keySet().iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
System.out.println(System.currentTimeMillis()-l2 + " iterator 遍历keySet() 花费时间");
// values() 利用两种不同的遍历方式比较速度
long l3 = System.currentTimeMillis();
for (Object obj : map1.values()
) {
System.out.println(obj);
}
System.out.println(System.currentTimeMillis()-l3 + " forEach 遍历values() 花费时间");
long l4 = System.currentTimeMillis();
Iterator<Integer> iterator2 = map1.values().iterator();
while (iterator2.hasNext()) {
System.out.println(iterator2.next());
}
System.out.println(System.currentTimeMillis()-l4 + " iterator 遍历values() 花费时间");
// entrySet() 利用两种不同的遍历方式遍历key比较速度
long l5 = System.currentTimeMillis();
Iterator<Map.Entry<Integer, Integer>> iterator3 = map1.entrySet().iterator();
while (iterator3.hasNext()) {
System.out.println(iterator3.next().getKey());
}
System.out.println(System.currentTimeMillis()-l5 + " iterator 遍历entrySet()中的key 花费时间");
long l6 = System.currentTimeMillis();
for (Map.Entry<Integer, Integer> entry:map1.entrySet()
) {
System.out.println(entry.getKey());
}
System.out.println(System.currentTimeMillis()-l6 + " for 遍历entrySet()中的key 花费时间");
// entrySet() 利用两种不同的遍历方式遍历value比较速度
long l7= System.currentTimeMillis();
Iterator<Map.Entry<Integer, Integer>> iterator4 = map1.entrySet().iterator();
while (iterator4.hasNext()) {
System.out.println(iterator4.next().getValue());
}
System.out.println(System.currentTimeMillis()-l7 + " iterator 遍历entrySet()中的value 花费时间");
long l8 = System.currentTimeMillis();
for (Map.Entry<Integer, Integer> entry:map1.entrySet()
) {
System.out.println(entry.getValue());
}
System.out.println(System.currentTimeMillis()-l8 + " for 遍历entrySet()中的value 花费时间");
一万条数据下,结果:
keySet : iterator遍历快
values : 俩差不多
entrySet -> key : 俩差不多,或许再大数据量下会见分晓
entrySet -> value : 俩差不多,或许再大数据量下会见分晓
keySet -> value :俩差不多,或许再大数据量下会见分晓
既然难以见分晓,那就换10万条数据,由于输出结果太长,这里代码及控制台就不作展示,比较直接放出来:
forEach 遍历keySet() 花费时间:588
iterator 遍历keySet() 花费时间:713forEach 遍历values() 花费时间:703
iterator 遍历values() 花费时间:1084iterator 遍历entrySet()中的key 花费时间:720
for 遍历entrySet()中的key 花费时间:735iterator 遍历entrySet()中的value 花费时间:517
for 遍历entrySet()中的value 花费时间:327forEach 遍历keySet()后获取value 花费时间:347
iterator 遍历keySet()后获取value花费时间:360
十万条数据下对比结果:
你TM用增强for就完事了!,至于你要用哪个方法,关我屁事
大家如果自己测试,比较不同方式的速率时,尽量做到一次性运行多种方式的代码,比如for循环和iterator一起运行测试,如果分开测试进行比较,则可能会因为网络状态等各种外部因素干扰而造成结果的不准确!