<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## parallelPrefix并行前綴 沒有“prefix()”方法,只有 **parallelPrefix()**。這類似于 **Stream** 類中的 **reduce()** 方法:它對前一個元素和當前元素執行一個操作,并將結果放入當前元素位置: ```JAVA // arrays/ParallelPrefix1.java import onjava.*; import java.util.Arrays; import static onjava.ArrayShow.*; public class ParallelPrefix1 { public static void main(String[] args) { int[] nums = new Count.Pint().array(10); show(nums); System.out.println(Arrays.stream(nums).reduce(Integer::sum).getAsInt()); Arrays.parallelPrefix(nums, Integer::sum); show(nums); System.out.println(Arrays.stream(new Count.Pint().array(6)).reduce(Integer::sum).getAsInt()); } } /* Output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 45 [0, 1, 3, 6, 10, 15, 21, 28, 36, 45] 15 */ ``` 這里我們對數組應用Integer::sum。在位置0中,它將先前計算的值(因為沒有先前的值)與原始數組位置0中的值組合在一起。在位置1中,它獲取之前計算的值(它只是存儲在位置0中),并將其與位置1中先前計算的值相結合。依次往復。 使用 **Stream.reduce()**,您只能得到最終結果,而使用 **Arrays.parallelPrefix()**,您還可以得到所有中間計算,以確保它們是有用的。注意,第二個 **Stream.reduce()** 計算的結果已經在 **parallelPrefix()** 計算的數組中。 使用字符串可能更清楚: ```JAVA // arrays/ParallelPrefix2.java import onjava.*; import java.util.Arrays; import static onjava.ArrayShow.*; public class ParallelPrefix2 { public static void main(String[] args) { String[] strings = new Rand.String(1).array(8); show(strings); Arrays.parallelPrefix(strings, (a, b) -> a + b); show(strings); } } /* Output: [b, t, p, e, n, p, c, c] [b, bt, btp, btpe, btpen, btpenp, btpenpc, btpenpcc] */ ``` 如前所述,使用流進行初始化非常優雅,但是對于大型數組,這種方法可能會耗盡堆空間。使用 **setAll()** 執行初始化更節省內存: ```JAVA // arrays/ParallelPrefix3.java // {ExcludeFromTravisCI} import java.util.Arrays; public class ParallelPrefix3 { static final int SIZE = 10_000_000; public static void main(String[] args) { long[] nums = new long[SIZE]; Arrays.setAll(nums, n -> n); Arrays.parallelPrefix(nums, Long::sum); System.out.println("First 20: " + nums[19]); System.out.println("First 200: " + nums[199]); System.out.println("All: " + nums[nums.length - 1]); } } /* Output: First 20: 190 First 200: 19900 All: 49999995000000 */ ``` 因為正確使用 **parallelPrefix()** 可能相當復雜,所以通常應該只在存在內存或速度問題(或兩者都有)時使用。否則,**Stream.reduce()** 應該是您的首選。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看