<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          實測!Stream.toList()和Collectors.toList() 哪個性能更好?

          共 30572字,需瀏覽 62分鐘

           ·

          2022-05-23 19:42

          昨天給大家介紹了Java 16中的Stream增強(qiáng),可以直接通過toList()來轉(zhuǎn)換成List。

          主要涉及下面這幾種轉(zhuǎn)換方式:

          list.stream().toList();
          list.stream().collect(Collectors.toList());
          list.stream().collect(Collectors.toUnmodifiableList());

          然后,看到有網(wǎng)友評論問:Stream.toList()Collectors.toList()的區(qū)別是什么?哪個性能好?

          處理結(jié)果的區(qū)別,其實上一篇文章和視頻里都有說:

          • Stream.toList()返回的List是不可變List,不能增刪改
          • Collectors.toList()返回的是個普通的List,可以增刪改
          • Collectors.toUnmodifiableList()返回的List是不可變List,不能增刪改

          而至于性能的話,今天我們就來測試一下,看看哪個性能更好。

          @BenchmarkMode(Mode.All)
          @Fork(1)
          @State(Scope.Thread)
          @Warmup(iterations = 20, time = 1, batchSize = 10000)
          @Measurement(iterations = 20, time = 1, batchSize = 10000)
          public class BenchmarkStreamToList {

              @Benchmark
              public List<Integer> streamToList() {
                  return IntStream.range(11000).boxed().toList();
              }

              @Benchmark
              public List<Integer> collectorsToList() {
                  return IntStream.range(11000).boxed().collect(Collectors.toList());
              }

              @Benchmark
              public List<Integer> streamToList() {
                  return IntStream.range(11000).boxed().toList();
              }

          }

          結(jié)果報告:

          Benchmark                                                                                  Mode  Cnt   Score    Error  Units
          BenchmarkStreamToList.collectorsToList                                                    thrpt   20  24.422 ±  0.268  ops/s
          BenchmarkStreamToList.collectorsToUnmodifiableList                                        thrpt   20  22.784 ±  0.599  ops/s
          BenchmarkStreamToList.streamToList                                                        thrpt   20  31.779 ±  1.732  ops/s
          BenchmarkStreamToList.collectorsToList                                                     avgt   20   0.045 ±  0.006   s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList                                         avgt   20   0.062 ±  0.035   s/op
          BenchmarkStreamToList.streamToList                                                         avgt   20   0.040 ±  0.028   s/op
          BenchmarkStreamToList.collectorsToList                                                   sample  445   0.046 ±  0.002   s/op
          BenchmarkStreamToList.collectorsToList:collectorsToList·p0.00                            sample        0.039            s/op
          BenchmarkStreamToList.collectorsToList:collectorsToList·p0.50                            sample        0.041            s/op
          BenchmarkStreamToList.collectorsToList:collectorsToList·p0.90                            sample        0.057            s/op
          BenchmarkStreamToList.collectorsToList:collectorsToList·p0.95                            sample        0.073            s/op
          BenchmarkStreamToList.collectorsToList:collectorsToList·p0.99                            sample        0.102            s/op
          BenchmarkStreamToList.collectorsToList:collectorsToList·p0.999                           sample        0.150            s/op
          BenchmarkStreamToList.collectorsToList:collectorsToList·p0.9999                          sample        0.150            s/op
          BenchmarkStreamToList.collectorsToList:collectorsToList·p1.00                            sample        0.150            s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList                                       sample  460   0.044 ±  0.001   s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList:collectorsToUnmodifiableList·p0.00    sample        0.042            s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList:collectorsToUnmodifiableList·p0.50    sample        0.044            s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList:collectorsToUnmodifiableList·p0.90    sample        0.046            s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList:collectorsToUnmodifiableList·p0.95    sample        0.047            s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList:collectorsToUnmodifiableList·p0.99    sample        0.051            s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList:collectorsToUnmodifiableList·p0.999   sample        0.057            s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList:collectorsToUnmodifiableList·p0.9999  sample        0.057            s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList:collectorsToUnmodifiableList·p1.00    sample        0.057            s/op
          BenchmarkStreamToList.streamToList                                                       sample  655   0.031 ±  0.001   s/op
          BenchmarkStreamToList.streamToList:streamToList·p0.00                                    sample        0.030            s/op
          BenchmarkStreamToList.streamToList:streamToList·p0.50                                    sample        0.031            s/op
          BenchmarkStreamToList.streamToList:streamToList·p0.90                                    sample        0.032            s/op
          BenchmarkStreamToList.streamToList:streamToList·p0.95                                    sample        0.033            s/op
          BenchmarkStreamToList.streamToList:streamToList·p0.99                                    sample        0.035            s/op
          BenchmarkStreamToList.streamToList:streamToList·p0.999                                   sample        0.037            s/op
          BenchmarkStreamToList.streamToList:streamToList·p0.9999                                  sample        0.037            s/op
          BenchmarkStreamToList.streamToList:streamToList·p1.00                                    sample        0.037            s/op
          BenchmarkStreamToList.collectorsToList                                                       ss   20   0.043 ±  0.001   s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList                                           ss   20   0.045 ±  0.004   s/op
          BenchmarkStreamToList.streamToList                                                           ss   20   0.031 ±  0.001   s/op

          從報告中我們可以看到:

          • 吞吐量:streamToList > collectorsToList > collectorsToUnmodifiableList
          • 平均耗時:streamToList > collectorsToList > collectorsToUnmodifiableList
          • p0.9999耗時:streamToList > collectorsToUnmodifiableList > collectorsToList
          • 冷啟動耗時:streamToList > collectorsToList > collectorsToUnmodifiableList

          所以,Stream.toList()的性能要各方面都要好于Collectors.toList()Collectors.toUnmodifiableList()

          如果您學(xué)習(xí)過程中如遇困難?可以加入我們超高質(zhì)量的技術(shù)交流群,參與交流與討論,更好的學(xué)習(xí)與進(jìn)步!本文收錄在了我正在連載的《Java新特性專欄》,該系列該用電子書的方式編寫,如果想要沉浸式閱讀學(xué)習(xí)的話,可以訪問Web版本:https://www.didispace.com/java-features/

          再放大一些數(shù)據(jù)量,試試:

          @Benchmark
          public List<Integer> streamToList() {
            return IntStream.range(110000).boxed().toList();
          }

          @Benchmark
          public List<Integer> collectorsToList() {
            return IntStream.range(110000).boxed().collect(Collectors.toList());
          }

          @Benchmark
          public List<Integer> streamToList() {
            return IntStream.range(110000).boxed().toList();
          }

          結(jié)果報告:

          Benchmark                                                                                  Mode  Cnt  Score   Error  Units
          BenchmarkStreamToList.collectorsToList                                                    thrpt   20  2.186 ± 0.162  ops/s
          BenchmarkStreamToList.collectorsToUnmodifiableList                                        thrpt   20  2.184 ± 0.042  ops/s
          BenchmarkStreamToList.streamToList                                                        thrpt   20  3.538 ± 0.058  ops/s
          BenchmarkStreamToList.collectorsToList                                                     avgt   20  0.426 ± 0.004   s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList                                         avgt   20  0.469 ± 0.016   s/op
          BenchmarkStreamToList.streamToList                                                         avgt   20  0.293 ± 0.008   s/op
          BenchmarkStreamToList.collectorsToList                                                   sample   58  0.448 ± 0.049   s/op
          BenchmarkStreamToList.collectorsToList:collectorsToList·p0.00                            sample       0.414           s/op
          BenchmarkStreamToList.collectorsToList:collectorsToList·p0.50                            sample       0.422           s/op
          BenchmarkStreamToList.collectorsToList:collectorsToList·p0.90                            sample       0.458           s/op
          BenchmarkStreamToList.collectorsToList:collectorsToList·p0.95                            sample       0.560           s/op
          BenchmarkStreamToList.collectorsToList:collectorsToList·p0.99                            sample       1.160           s/op
          BenchmarkStreamToList.collectorsToList:collectorsToList·p0.999                           sample       1.160           s/op
          BenchmarkStreamToList.collectorsToList:collectorsToList·p0.9999                          sample       1.160           s/op
          BenchmarkStreamToList.collectorsToList:collectorsToList·p1.00                            sample       1.160           s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList                                       sample   60  0.458 ± 0.004   s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList:collectorsToUnmodifiableList·p0.00    sample       0.447           s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList:collectorsToUnmodifiableList·p0.50    sample       0.455           s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList:collectorsToUnmodifiableList·p0.90    sample       0.471           s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList:collectorsToUnmodifiableList·p0.95    sample       0.482           s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList:collectorsToUnmodifiableList·p0.99    sample       0.492           s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList:collectorsToUnmodifiableList·p0.999   sample       0.492           s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList:collectorsToUnmodifiableList·p0.9999  sample       0.492           s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList:collectorsToUnmodifiableList·p1.00    sample       0.492           s/op
          BenchmarkStreamToList.streamToList                                                       sample   78  0.293 ± 0.012   s/op
          BenchmarkStreamToList.streamToList:streamToList·p0.00                                    sample       0.277           s/op
          BenchmarkStreamToList.streamToList:streamToList·p0.50                                    sample       0.284           s/op
          BenchmarkStreamToList.streamToList:streamToList·p0.90                                    sample       0.309           s/op
          BenchmarkStreamToList.streamToList:streamToList·p0.95                                    sample       0.377           s/op
          BenchmarkStreamToList.streamToList:streamToList·p0.99                                    sample       0.459           s/op
          BenchmarkStreamToList.streamToList:streamToList·p0.999                                   sample       0.459           s/op
          BenchmarkStreamToList.streamToList:streamToList·p0.9999                                  sample       0.459           s/op
          BenchmarkStreamToList.streamToList:streamToList·p1.00                                    sample       0.459           s/op
          BenchmarkStreamToList.collectorsToList                                                       ss   20  0.474 ± 0.133   s/op
          BenchmarkStreamToList.collectorsToUnmodifiableList                                           ss   20  0.493 ± 0.099   s/op
          BenchmarkStreamToList.streamToList                                                           ss   20  0.325 ± 0.056   s/op

          從報告中我們可以看到

          • 吞吐量:streamToList > collectorsToList > collectorsToUnmodifiableList
          • 平均耗時:streamToList > collectorsToList > collectorsToUnmodifiableList
          • p0.9999耗時:streamToList > collectorsToUnmodifiableList > collectorsToList
          • 冷啟動耗時:streamToList > collectorsToList > collectorsToUnmodifiableList

          所以,即使集合內(nèi)的元素增大,Stream.toList()的性能在各方面依然都要好于Collectors下的方法。

          好了,今天的分享就到這里,你學(xué)會了嗎?

          我們創(chuàng)建了一個高質(zhì)量的技術(shù)交流群,與優(yōu)秀的人在一起,自己也會優(yōu)秀起來,趕緊點擊加群,享受一起成長的快樂。另外,如果你最近想跳槽的話,年前我花了2周時間收集了一波大廠面經(jīng),節(jié)后準(zhǔn)備跳槽的可以點擊這里領(lǐng)取

          推薦閱讀

          ··································

          你好,我是程序猿DD,10年開發(fā)老司機(jī)、阿里云MVP、騰訊云TVP、出過書創(chuàng)過業(yè)、國企4年互聯(lián)網(wǎng)6年從普通開發(fā)到架構(gòu)師、再到合伙人。一路過來,給我最深的感受就是一定要不斷學(xué)習(xí)并關(guān)注前沿。只要你能堅持下來,多思考、少抱怨、勤動手,就很容易實現(xiàn)彎道超車!所以,不要問我現(xiàn)在干什么是否來得及。如果你看好一個事情,一定是堅持了才能看到希望,而不是看到希望才去堅持。相信我,只要堅持下來,你一定比現(xiàn)在更好!如果你還沒什么方向,可以先關(guān)注我,這里會經(jīng)常分享一些前沿資訊,幫你積累彎道超車的資本。

          點擊領(lǐng)取2022最新10000T學(xué)習(xí)資料
          瀏覽 48
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美在线麻豆 | 天堂av成人 | 色婷婷国产精品高潮呻吟AV久久 | 国产情侣第一页 | 黄色毛片在线 |