Java 8 并行数组排序

原文:https://www.studytonight.com/java-8/java-8-parallel-array-sorting

在 Java 8 中,一个新的附加特性“并行数组排序”被添加到Arrays类中。并行排序是一种使用多线程、多处理来执行操作的方法。主要有两种方法:顺序和并行。在早期的 Java 版本中,Array 类使用了顺序方法来排序数组元素。但是现在增加了并行方法,给Arrays类带来了性能提升。

新的方法已经添加到 java.util.Arrays 类中,该类使用 JSR 166 Fork/Join 并行公共池来提供对并行数组的排序。

这些方法被称为parallelSort(),并为所有原始数据类型和可比对象重载。意思是,我们可以并行排序类型的数组: intbyteshortchardoublefloat 等。比如对整数数组进行排序,我们可以使用parallels art(int[]a)而对于双数组parallels art(double[]a)的方法。

Java 数组新的并行启动()方法

以下是在 Java 8 版本中添加到 Java Array 类的方法。

|

方法

|

描述

| | 公共静态 void parallelSort(字节[] a) | 它将指定的数组按升序排列。 | | 公共静态 void parallelSort(字节[] a,int fromIndex,int toIndex) | 它将数组的指定范围按升序排列。要排序的范围从索引 fromIndex(包含)延伸到索引 toIndex(不包含)。如果 fromIndex == toIndex,则要排序的区域为空。 | | 公共静态 void parallels art(char[]a) | 它将指定的数组按升序排列。 | | 公共静态 void parallels art(char[]a,int fromIndex,int toIndex) | 它将数组的指定范围按升序排列。要排序的范围从索引 fromIndex(包含)延伸到索引 toIndex(不包含)。如果 fromIndex == toIndex,则要排序的区域为空。 | | 公共静态 void parallels art(double[]a) | 它将指定的数组按升序排列。 | | 公共静态 void parallels art(double[]a,int fromIndex,int toIndex) | 它将数组的指定范围按升序排列。要排序的范围从索引 fromIndex(包含)延伸到索引 toIndex(不包含)。如果 fromIndex == toIndex,则要排序的区域为空。 | | 公共静态 void parallels art(float[]a) | 它将指定的数组按升序排列。 | | 公共静态 void parallels art(float[]a,int fromIndex,int toIndex) | 它将数组的指定范围按升序排列。要排序的范围从索引 fromIndex(包含)延伸到索引 toIndex(不包含)。如果 fromIndex == toIndex,则要排序的区域为空。 | | 公共静态 void parallels art(int[]a) | 它将指定的数组按升序排列。 | | 公共静态 void parallels art(int[]a,int fromIndex,int toIndex) | 它将数组的指定范围按升序排列。要排序的范围从索引 fromIndex(包含)延伸到索引 toIndex(不包含)。如果 fromIndex == toIndex,则要排序的区域为空。 | | 公共静态 void parallels art(long[]a) | 它将指定的数组按升序排列。 | | 公共静态 void parallels art(long[]a,int fromIndex,int toIndex) | 它将数组的指定范围按升序排列。要排序的范围从索引 fromIndex(包含)延伸到索引 toIndex(不包含)。如果 fromIndex == toIndex,则要排序的区域为空。 | | 公共静态无效并行测试(简称[] a) | 它将指定的数组按升序排列。 | | 公共静态 void parallels art(short[]a,int fromIndex,int toIndex) | 它将数组的指定范围按升序排列。要排序的范围从索引 fromIndex(包含)延伸到索引 toIndex(不包含)。如果 fromIndex == toIndex,则要排序的区域为空。 | | 公共静态>无效并行(T[] a) | 根据元素的自然顺序,将指定的对象数组按升序排序。数组中的所有元素都必须实现 Comparable 接口。此外,数组中的所有元素必须是相互可比较的(也就是说,e1.compareTo(e2)不能为数组中的任何元素 e1 和 e2 抛出 ClassCastException)。 | | 公共静态 cmp) | 它根据指定的Comparator产生的顺序对指定的对象数组进行排序。数组中的所有元素必须通过指定的Comparator进行相互比较(也就是说,c.compare(e1,e2)不得为数组中的任何元素 e1 和 e2 引发 ClassCastException)。 | | 公共静态>无效并行(T[] a,int fromIndex,int toIndex) | 它根据元素的自然顺序,将指定对象数组的指定范围按升序排序。要排序的范围从 index fromIndex(包含)到 index toIndex(不包含)。(如果 fromIndex==toIndex,则要排序的区域为空。)此范围内的所有元素都必须实现Comparable接口。此外,该范围内的所有元素必须相互可比较(即,e1.compareTo(e2)不得为数组中的任何元素 e1 和 e2 引发 ClassCastException)。 | | 公共静态无效并行(T[] a,int fromIndex,int toIndex,Comparator super T> cmp) | 它根据指定的Comparator产生的顺序对指定对象数组的指定范围进行排序。要排序的范围从 index fromIndex(包含)到 index toIndex(不包含)。(如果 fromIndex==toIndex,则要排序的区域为空。)该范围内的所有元素必须通过指定的Comparator进行相互比较(也就是说,c.compare(e1,e2)不得为该范围内的任何元素 e1 和 e2 引发 ClassCastException)。 |

举例时间:

让我们举个例子来并行排序一个数组。这里我们使用的是 Array 类的parallelSort()方法,它返回一个排序的数组。请看下面的例子。

import java.util.Arrays;

public class STDemo {

    public static void main(String[] args) {
        int arr[] = {10,50,20,48,5};
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println("\nAfter sorting...");
        Arrays.parallelSort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }

    }
}

10 50 20 48 5 分拣后... 5 10 20 48 50

另一个例子的时间:

我们再举一个例子来理解parallelSort()法。这里,我们使用它的一个重载方法,用于对子数组进行排序。我们只需要指定数组的开始和结束索引,然后方法会对其进行相应的排序。请看下面的例子。

import java.util.Arrays;

public class STDemo {

    public static void main(String[] args) {
        int arr[] = {10,50,20,48,5};
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println("\nAfter sorting...");
        Arrays.parallelSort(arr,0,3);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }

    }
}

10 50 20 48 5 分拣后... 10 20 50 48 5