色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java8stream和foreach哪個(gè)效率高?

1.問題描述

java8stream和foreach哪個(gè)效率高?

問題結(jié)論

150W條數(shù)據(jù)以上:stream>paralleStream>simple

150W條數(shù)據(jù)以下:simple>stream>paralleStream

從性能上考慮:小數(shù)據(jù)量用普通的forEach就可以,沒有必要使用java8中的新出來的幾種,已經(jīng)在項(xiàng)目中使用的也不需要改回來,10W條也就幾毫秒的差距。

2.測(cè)試用例

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)+"毫秒");

}

}

2.1當(dāng)num=50000000時(shí)

用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毫秒

2.2當(dāng)num=500000時(shí)

用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毫秒

2.3當(dāng)num=5000時(shí)

用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毫秒

最直觀的感覺,stream的流式處理應(yīng)該比較快,這種想當(dāng)然的推測(cè),需要事實(shí)去佐證,運(yùn)行過測(cè)試代碼之后,發(fā)現(xiàn)并不是那么回事。耳聽為虛,眼見為實(shí),李子是不是澀的,最簡單的方式是嘗一口。請(qǐng)記住,編寫代碼時(shí),一定要以最簡潔為原則,畢竟運(yùn)行程序的硬件成本會(huì)隨著時(shí)間的推移在不斷降低。

作者:夕陽雨晴,我的:偶爾美文,主流Java,為你講述不一樣的碼農(nóng)生活。