在java中哪些是標(biāo)準(zhǔn)流 java8 stream和foreach哪個效率高?
java8 stream和foreach哪個效率高?1. 問題描述java8 stream和foreach哪個效率高?問題結(jié)論150W條數(shù)據(jù)以上:streamgtparalleStreamgtsimp
java8 stream和foreach哪個效率高?
1. 問題描述
java8 stream和foreach哪個效率高?
問題結(jié)論
150W條數(shù)據(jù)以上:streamgtparalleStreamgtsimple
150W條數(shù)據(jù)以下:simplegtstreamgtparalleStream
從性能上考慮:小數(shù)據(jù)量用普通的forEach就可以,沒有必要使用java8中的新出來的幾種,已經(jīng)在項目中使用的也不需要改回來,10W條也就幾毫秒的差距。
2. 測試用例
import
import
public class ForEachMain {
public static void main(String[] args) {
// 實例化arrayList
ListltIntegergt arrayList new ArrayListltIntegergt()
int num 15000000
// 插入10萬條數(shù)據(jù)
for (int i 0 i lt num i ) {
(i)
}
ListltIntegergt res new ArrayListltgt()
()
// 用foreach循環(huán)arrayList
long arrayForeachStartTime ()
for (Integer in : arrayList) {
(in)
}
long arrayForeachEndTime ()
(
用foreach循環(huán)arrayList (num) 次花費時間: (arrayForeachEndTime - arrayForeachStartTime) 毫秒)
()
// 用stream-foreach循環(huán)arrayList
long arrayStreamStartTime ()
().forEach(e -gt (e))
long arrayStreamEndTime ()
(
用Stream-foreach循環(huán)arrayList (num) 次花費時間: (arrayStreamEndTime - arrayStreamStartTime) 毫秒)
()
// 用parallelStream-foreach循環(huán)arrayList
long arrayParallelStreamStartTime ()
().forEach(e -gt (e))
long arrayParallelStreamEndTime ()
(用parallelStream-foreach循環(huán)arrayList (num) 萬次花費時間:
(arrayParallelStreamEndTime - arrayParallelStreamStartTime) 毫秒)
}
}
2.1 當(dāng)num 50000000時
用foreach循環(huán)arrayList 5000萬次花費時間:2840毫秒
用stream-foreach循環(huán)arrayList 5000萬次花費時間:507毫秒
用parallelStream-foreach循環(huán)arrayList 5000萬次花費時間:1168毫秒
2.2 當(dāng)num 500000時
用foreach循環(huán)arrayList 50萬次花費時間:13毫秒
用stream-foreach循環(huán)arrayList 50萬次花費時間:25毫秒
用parallelStream-foreach循環(huán)arrayList 50萬次花費時間:35毫秒
2.3 當(dāng)num 5000時
用foreach循環(huán)arrayList 5000次花費時間:1毫秒
用stream-foreach循環(huán)arrayList 0萬次花費時間:16毫秒
用parallelStream-foreach循環(huán)arrayList 0萬次花費時間:8毫秒
最直觀的感覺,stream的流式處理應(yīng)該比較快,這種想當(dāng)然的推測,需要事實去佐證,運行過測試代碼之后,發(fā)現(xiàn)并不是那么回事。耳聽為虛,眼見為實,李子是不是澀的,最簡單的是嘗一口。請記住,編寫代碼時,一定要以最簡潔為原則,畢竟運行程序的硬件成本會隨著時間的推移在不斷降低。
作者:夕陽雨晴,歡迎關(guān)注我的頭條號:偶爾美文,主流Java,為你講述不一樣的碼農(nóng)生活。
java中什么類需要序列化?
為了讀寫方便,比如把一個對象寫入文本中,必須進行序列化。
java對象序列化不僅保留一個對象的數(shù)據(jù),而且遞歸保存對象引用的每個對象的數(shù)據(jù)??梢詫⒄麄€對象層次寫入字節(jié)流中,可以保存在文件中或在網(wǎng)絡(luò)連接上傳遞。利用對象序列化可以進行對象的