java中for、foreach、stream性能⽐较
我们在开发中循环遍历⼀个数组经常会⽤到,jdk8推出了⼀些新特性,对循环做了⽐较,通过代码亲测,记录⼀下!
1、for循环
public static void main(String[] args){
Long startTime = System.currentTimeMillis();
formMethod();
Long endTime = System.currentTimeMillis();
System.out.println("result:"+(endTime - startTime));
}
public static void formMethod(){
for(int i =0; i <10000; i++){
java stream
System.out.println("start::::::::::::");
}
}
2、foreach循环(for循环的增强版)
public static void main(String[] args){
List<Integer> list =new ArrayList<Integer>();
for(int i =0; i <10000; i++){
list.add(i);
}
Long startTime = System.currentTimeMillis();
foreachMethod(list);
Long endTime = System.currentTimeMillis();
System.out.println("result:"+(endTime - startTime));
}
/**
* foreach
* @param list
*/
public static void foreachMethod(List<Integer> list){
list.forEach(i ->{
System.out.println("++++++++++++");
});
}
结论:
结论:
1、通过代码测试发现在1万以内的数据,for循环⽐foreach效率要⾼⼀些;
但是10万以内数据的时候,foreach效率更⾼⼀些;
2、foreach [10万数据时间1112116512031115][1万数据235146176164175];
3、for循环[10万数据时间133014371347][1万数据110109141];
3、stream api
(1)、串⾏处理,即同步处理
public static void main(String[] args){
List<Integer> list =new ArrayList<Integer>();
for(int i =0; i <10000; i++){
list.add(i);
}
Long startTime = System.currentTimeMillis();
streamMethod(list);
Long endTime = System.currentTimeMillis();
System.out.println("result:"+(endTime - startTime));
}
/**
* stream 串⾏处理
* @param list
*/
public static void streamMethod(List<Integer> list){
list.stream().forEach(i ->{
System.out.println("========");
});
}
结论:
1万以内的数据,for循环的性能要⾼于foreach和stream;
10万以内的数据明显可以看出stream效率最⾼,其次foreach,最后是for;
[10万数据时间854892789844][1万数据172156219172171];
(2)并⾏处理,即stream api提供了异步处理机制
public static void main(String[] args){
List<Integer> list =new ArrayList<Integer>();
for(int i =0; i <10000; i++){
list.add(i);
}
Long startTime = System.currentTimeMillis();
parallelStreamMethod(list);
Long endTime = System.currentTimeMillis();
System.out.println("result:"+(endTime - startTime));
}
/**
* stream 并⾏处理
* @param list
*/
public static void parallelStreamMethod(List<Integer> list){
list.parallelStream().forEach(i ->{
System.out.println("========");
});
}
结论:
1万以内的数据,for循环的性能要⾼于foreach和stream;
10万以内的数据明显可以看出stream效率最⾼,其次foreach,最后是for。
[10万数据时间893844914972][1万数据219203234188]
最终总结:
如果数据在1万以内的话,for循环效率⾼于foreach和stream;
如果数据量在10万的时候,stream效率最⾼,其次是foreach,最后是for。
另外需要注意的是如果数据达到100万的话,parallelStream异步并⾏处理效率最⾼,⾼于foreach和for。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。