1.問題描述
java8stream和foreach哪個(gè)效率高?
從性能上考慮:小數(shù)據(jù)量用普通的forEach就可以,沒有必要使用java8中的新出來的幾種,已經(jīng)在項(xiàng)目中使用的也不需要改回來,10W條也就幾毫秒的差距。
importjava.util.ArrayList; importjava.util.List;
publicclassForEachMain{
publicstaticvoidmain(String[]args){
//實(shí)例化arrayList
List<Integer>arrayList=newArrayList<Integer>();
intnum=15000000;
//插入10萬條數(shù)據(jù)
for(inti=0;i<num;i++){
arrayList.add(i);
}
List<Integer>res=newArrayList<>();
res.clear();
//用foreach循環(huán)arrayList
longarrayForeachStartTime=System.currentTimeMillis();
for(Integerin:arrayList){
res.add(in);
}
longarrayForeachEndTime=System.currentTimeMillis();
System.out.println(
"用foreach循環(huán)arrayList"+(num)+"次花費(fèi)時(shí)間:"+(arrayForeachEndTime-arrayForeachStartTime)+"毫秒");
res.clear();
//用stream-foreach循環(huán)arrayList
longarrayStreamStartTime=System.currentTimeMillis();
arrayList.stream().forEach(e->res.add(e));
longarrayStreamEndTime=System.currentTimeMillis();
System.out.println(
"用Stream-foreach循環(huán)arrayList"+(num)+"次花費(fèi)時(shí)間:"+(arrayStreamEndTime-arrayStreamStartTime)+"毫秒");
res.clear();
//用parallelStream-foreach循環(huán)arrayList
longarrayParallelStreamStartTime=System.currentTimeMillis();
arrayList.parallelStream().forEach(e->res.add(e));
longarrayParallelStreamEndTime=System.currentTimeMillis();
System.out.println("用parallelStream-foreach循環(huán)arrayList"+(num)+"萬次花費(fèi)時(shí)間:"
+(arrayParallelStreamEndTime-arrayParallelStreamStartTime)+"毫秒");
}
}
用foreach循環(huán)arrayList5000萬次花費(fèi)時(shí)間:2840毫秒
用stream-foreach循環(huán)arrayList5000萬次花費(fèi)時(shí)間:507毫秒
用parallelStream-foreach循環(huán)arrayList5000萬次花費(fèi)時(shí)間:1168毫秒
用foreach循環(huán)arrayList50萬次花費(fèi)時(shí)間:13毫秒
用stream-foreach循環(huán)arrayList50萬次花費(fèi)時(shí)間:25毫秒
用parallelStream-foreach循環(huán)arrayList50萬次花費(fèi)時(shí)間:35毫秒
用foreach循環(huán)arrayList5000次花費(fèi)時(shí)間:1毫秒
用stream-foreach循環(huán)arrayList0萬次花費(fèi)時(shí)間:16毫秒
用parallelStream-foreach循環(huán)arrayList0萬次花費(fèi)時(shí)間:8毫秒