欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中for、foreach、stream區(qū)別和性能比較詳解

 更新時(shí)間:2024年03月04日 11:14:17   作者:思靜語(yǔ)  
for、foreach、stream都可以循環(huán)處理數(shù)據(jù),如果單純當(dāng)循環(huán)使用,for、foreach、stream哪個(gè)性能更好,這篇文章主要給大家介紹了關(guān)于Java中for、foreach、stream區(qū)別和性能的相關(guān)資料,需要的朋友可以參考下

性能比較

最終總結(jié):如果數(shù)據(jù)在1萬(wàn)以內(nèi)的話,for循環(huán)效率高于foreach和stream;如果數(shù)據(jù)量在10萬(wàn)的時(shí)候,stream效率最高,其次是foreach,最后是for。另外需要注意的是如果數(shù)據(jù)達(dá)到100萬(wàn)的話,parallelStream異步并行處理效率最高,高于foreach和for。

在效率方面,stream().forEach、forEach 和 parallelStream 之間存在一些差異。

  • stream().forEach:
    ○ 在處理大量數(shù)據(jù)時(shí),使用 stream().forEach 可能會(huì)比普通的 forEach 更高效。這是因?yàn)?stream().forEach 可以使用流式操作,對(duì)數(shù)據(jù)進(jìn)行更優(yōu)化的處理,例如通過(guò)并行流或者其他優(yōu)化手段來(lái)提高處理速度。
    ○ 但是需要注意的是,stream().forEach 也可能會(huì)引入一些額外的性能開(kāi)銷,比如流的創(chuàng)建和操作過(guò)程中的一些額外計(jì)算。
  • forEach:
    ○ forEach 方法是集合類的默認(rèn)方法,它通常會(huì)按照集合內(nèi)部的數(shù)據(jù)結(jié)構(gòu)進(jìn)行遍歷,不涉及額外的流式操作或并行處理。因此,在某些情況下,forEach 可能會(huì)比 stream().forEach 更加高效。
  • parallelStream:
    ○ parallelStream 方法可以在處理大量數(shù)據(jù)時(shí)提供更高的效率,因?yàn)樗梢岳枚嗪颂幚砥鞑⑿刑幚頂?shù)據(jù)。在某些情況下,特別是對(duì)于需要并行處理的大型數(shù)據(jù)集合,使用 parallelStream 可能會(huì)比順序處理更加高效。
    ○ 然而,并行處理也可能引入一些額外的開(kāi)銷,比如線程調(diào)度、同步等,因此并不是所有情況下都適合使用 parallelStream。
    總的來(lái)說(shuō),對(duì)于數(shù)據(jù)量較小的情況,forEach 和 stream().forEach 的性能差異可能并不明顯;而對(duì)于大型數(shù)據(jù)集合或需要并行處理的情況,考慮使用 parallelStream 可能會(huì)更加高效。在實(shí)際應(yīng)用中,可以根據(jù)具體情況進(jìn)行性能測(cè)試和選擇合適的方法。

區(qū)別

在Java中,forEach 方法是用來(lái)對(duì)集合中的每個(gè)元素執(zhí)行特定操作的方法。stream().forEach 和 forEach 方法都可以使用在集合類上,但是有一些區(qū)別。

  • stream().forEach:
    ○ stream().forEach 是針對(duì) Stream 接口的方法,它通過(guò)創(chuàng)建一個(gè)流(Stream)來(lái)操作集合中的元素。這意味著它可以對(duì)集合進(jìn)行更靈活的操作,比如篩選、映射和過(guò)濾等。
    ○ 使用 stream().forEach 可以讓操作變得更加函數(shù)式和流暢,可以方便地進(jìn)行各種中間操作和終端操作。
  • forEach:
    ○ forEach 是 Iterable 接口中的默認(rèn)方法,因此幾乎所有的集合類都支持 forEach 方法。
    ○ forEach 方法是串行執(zhí)行的,即對(duì)集合中的每個(gè)元素依次執(zhí)行指定的操作。這意味著它不能并行處理集合中的元素。
  • parallelStream:
    ○ parallelStream 是 Collection 接口中新增的方法,它可以將集合轉(zhuǎn)換成并行流,從而允許在多個(gè)線程上并行處理集合中的元素。
    ○ 與普通的 stream() 方法相比,parallelStream 方法可以提高處理大量數(shù)據(jù)時(shí)的效率,因?yàn)樗梢岳枚嗪颂幚砥鞑⑿刑幚頂?shù)據(jù)。
    因此,stream().forEach 提供了更多的靈活性和功能性,可以結(jié)合流式操作來(lái)對(duì)集合進(jìn)行處理;而 forEach 和 parallelStream 則是集合類提供的簡(jiǎn)單遍歷和并行處理的方法。

使用方式和行為

stream().forEach() 和 forEach() 在使用方式和行為上有一些區(qū)別。

  • stream().forEach():
    ○ stream().forEach() 是流(Stream)API 的操作,用于對(duì)流中的每個(gè)元素執(zhí)行給定的操作。
    ○ 它是一個(gè)終端操作,用于觸發(fā)流的遍歷和操作。
    ○ stream().forEach() 可以接收一個(gè) lambda 表達(dá)式或方法引用作為參數(shù),用于定義要執(zhí)行的操作。
    ○ 它可以在串行流或并行流上執(zhí)行操作,如果使用并行流,在多線程情況下可以實(shí)現(xiàn)更高的處理效率。
    ○ stream().forEach() 不保證元素的遍歷順序,可能是無(wú)序的。
  • forEach():
    ○ forEach() 是 Iterable 接口的默認(rèn)方法,用于對(duì)集合中的每個(gè)元素執(zhí)行給定的操作。
    ○ 它是一個(gè)終端操作,用于觸發(fā)集合的遍歷和操作。
    ○ forEach() 可以接收一個(gè) lambda 表達(dá)式或方法引用作為參數(shù),用于定義要執(zhí)行的操作。
    ○ 它在單線程下按照集合的順序依次遍歷元素執(zhí)行操作。
    ○ forEach() 保證按照集合元素的順序執(zhí)行操作,并且保持了元素的順序性。
    總體而言,stream().forEach() 主要用于流的操作,可以進(jìn)行并行處理和無(wú)序遍歷,適用于處理復(fù)雜的數(shù)據(jù)、并行操作和無(wú)序操作的場(chǎng)景。而 forEach() 則主要用于對(duì)集合進(jìn)行遍歷,并且保持了元素的順序性,適用于簡(jiǎn)單的遍歷操作。
fori
for (int i = 0; i < objects.size(); i++) {}
foreach
for (Object o : objects) {}
fori最普通的循環(huán),可以時(shí)候得到當(dāng)前的索引位置。
 
foreach 和fori區(qū)別不大,foreach是普通fori的增強(qiáng)版用起來(lái)更方便。但是沒(méi)有當(dāng)前索引。
1.list的遍歷  
方法一:itli  或者fori
for (int i = 0; i < list3.size(); i++) {
  Integer integer =  list3.get(i);
}
方法二:iter
for (Integer integer : list3) {
  
}
方法三:forEach
list.forEach(o->{});

方法四:stream().forEach
list.stream()
    .forEach(
        o -> {
        });

總結(jié) 

到此這篇關(guān)于Java中for、foreach、stream區(qū)別和性能比較的文章就介紹到這了,更多相關(guān)Java中for、foreach、stream區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java單鏈表逆序用法代碼示例

    java單鏈表逆序用法代碼示例

    這篇文章主要介紹了java單鏈表逆序用法代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 微信支付H5調(diào)用支付詳解(java版)

    微信支付H5調(diào)用支付詳解(java版)

    本篇文章主要介紹了微信支付H5調(diào)用支付詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。
    2016-12-12
  • j2Cache線上異常排查問(wèn)題解決記錄分析

    j2Cache線上異常排查問(wèn)題解決記錄分析

    這篇文章主要為大家介紹了關(guān)于j2Cache線上異常排查的問(wèn)題解決記錄分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • idea springboot 修改css,jsp不重啟實(shí)現(xiàn)頁(yè)面更新的問(wèn)題

    idea springboot 修改css,jsp不重啟實(shí)現(xiàn)頁(yè)面更新的問(wèn)題

    這篇文章主要介紹了idea springboot 修改css,jsp不重啟實(shí)現(xiàn)頁(yè)面更新的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • JavaSE實(shí)現(xiàn)電影院系統(tǒng)

    JavaSE實(shí)現(xiàn)電影院系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了JavaSE實(shí)現(xiàn)電影院系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Spring IOC中的Bean對(duì)象用法

    Spring IOC中的Bean對(duì)象用法

    這篇文章主要介紹了Spring IOC中的Bean對(duì)象用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java中RocketMQ使用方法詳解

    Java中RocketMQ使用方法詳解

    這篇文章主要介紹了RocketMQ和Kafka在SpringBoot中的使用方法,以及如何保證消息隊(duì)列的順序性、可靠性以及冪等性,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • 一文詳解Java如何實(shí)現(xiàn)自定義注解

    一文詳解Java如何實(shí)現(xiàn)自定義注解

    Java實(shí)現(xiàn)自定義注解其實(shí)很簡(jiǎn)單,跟類定義差不多,只是屬性的定義可能跟我們平時(shí)定義的屬性略有不同,這篇文章主要給大家介紹了關(guān)于Java如何實(shí)現(xiàn)自定義注解的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • Java中自定義泛型方法及其應(yīng)用示例代碼

    Java中自定義泛型方法及其應(yīng)用示例代碼

    泛型方法是Java中一個(gè)強(qiáng)大的特性,它允許我們?cè)诜椒?jí)別使用類型參數(shù),提高代碼的復(fù)用性和類型安全性,通過(guò)本文,讀者可以學(xué)習(xí)如何定義和使用泛型方法,并了解其在處理集合、比較對(duì)象、創(chuàng)建實(shí)例等任務(wù)中的應(yīng)用,感興趣的朋友一起看看吧
    2025-02-02
  • 使用SpringBoot與Thrift實(shí)現(xiàn)RPC通信的方式詳解

    使用SpringBoot與Thrift實(shí)現(xiàn)RPC通信的方式詳解

    在微服務(wù)架構(gòu)的世界里,服務(wù)間的通信機(jī)制選擇成為了關(guān)鍵決策之一,RPC因其簡(jiǎn)潔、高效的特點(diǎn)備受青睞,本文將詳細(xì)探討如何利用Spring?Boot和Thrift框架構(gòu)建RPC通信,讓讀者理解其內(nèi)在原理及實(shí)現(xiàn)方式,需要的朋友可以參考下
    2023-10-10

最新評(píng)論