接口格式
测试速度的接口,其中num为传入的数据的容量,我们分别传入10000和30000两种的数据量,来测试一下7种方式遍历
@GetMapping("/speed")
public void testSpeed(@RequestParam Integer num){
List<Integer> lists = new ArrayList<>();
for (int i=0;i<num;i++){
lists.add(i);
}
testSpeed(lists);
}
遍历方式
1.普通for循环
//1.普通for循环
long before = System.currentTimeMillis();
for (int i=0;i<lists.size();i++){
System.out.print(i);
}
long after = System.currentTimeMillis();
System.out.println();
System.out.println("普通for循环:"+(after-before));
2.forEach循环
//2.forEach循环
long before2 = System.currentTimeMillis();
for (int current:lists){
System.out.print(current);
}
long after2 = System.currentTimeMillis();
System.out.println();
System.out.println("forEach循环:"+(after2-before2));
3.迭代器循环
//3.iterator循环
long before3 = System.currentTimeMillis();
Iterator<Integer> iterator = lists.iterator();
while (iterator.hasNext()){
System.out.print(iterator.next());
}
long after3 = System.currentTimeMillis();
System.out.println();
System.out.println("迭代器循环:"+(after3-before3));
4.List.forEach
//4.List.forEach循环
long before4 = System.currentTimeMillis();
lists.forEach(
i -> System.out.print(i)
);
long after4 = System.currentTimeMillis();
System.out.println();
System.out.println("List.forEach:"+(after4-before4));
5.lists.stream().forEach
//5.stream().forEach
long before5 = System.currentTimeMillis();
lists.stream().forEach(
i-> System.out.print(i)
);
long after5 = System.currentTimeMillis();
System.out.println();
System.out.println("lists.stream().forEach:"+(after5-before5));
6.lists.parallelStream().forEach
//6.parallelStream().forEach
long before6 = System.currentTimeMillis();
lists.parallelStream().forEach(
i-> System.out.print(i)
);
long after6 = System.currentTimeMillis();
System.out.println();
System.out.println("lists.parallelStream().forEach:"+(after6-before6));
7.lists.parallelStream().forEachOrdered
//7.parallelStream().forEachOrdered
long before7 = System.currentTimeMillis();
lists.parallelStream().forEachOrdered(
i-> System.out.print(i)
);
long after7 = System.currentTimeMillis();
System.out.println();
System.out.println("lists.parallelStream().forEachOrdered:"+(after7-before7));
结果
通过10000和30000的数据量结果如下,结果和我之前想的完全不一样,之前一直以为并行流要比串行流快很多,但是事实却是…
10000数据量:
排序方式 耗时(ms)
普通for循环 48
forEach循环 46
迭代器循环 47
List.forEach 47
lists.stream().forEach 49
lists.parallelStream().forEach 61
lists.parallelStream().forEachOrdered 58
耗时比较:
forEach循环 < List.forEach < 迭代器循环 < 普通for循环 < lists.stream().forEach < lists.parallelStream().forEachOrdered < lists.parallelStream().forEach
30000数据量:
排序方式 耗时(ms)
普通for循环 135
forEach循环 140
迭代器循环 140
List.forEach 137
lists.stream().forEach 138
lists.parallelStream().forEach 221
lists.parallelStream().forEachOrdered 144
耗时比较:
List.forEach < lists.stream().forEach < 迭代器循环 <= forEach循环 < 普通for循环 < lists.parallelStream().forEachOrdered < lists.parallelStream().forEach
————————————————
https://blog.csdn.net/sinat_22797429/article/details/86663979