Java并行数组排序

Java在Array类中提供了一项新的附加功能, 该功能用于对数组元素进行并行排序.java.util.Arrays包中添加了新方法, 该方法使用JSR 166 Fork / Join并行公共池来并行地对数组进行排序。被称为parallelSort(), 并且对所有原始数据类型和Comparable对象都进行了重载。
下表包含Arrays重载排序方法。

方法 描述
public static void parallelSort(byte[] a) 它将指定的数组按升序排列。
public static void parallelSort(byte[] a, int fromIndex, int toIndex) 它将指定范围的数组按升序排列。要排序的范围从索引fromIndex(含)到索引toIndex(不包含)。如果fromIndex == toIndex, 则要排序的范围为空。
public static void parallelSort(char[] a) 它将指定的数组按升序排列。
public static void parallelSort(char[] a, int fromIndex, int toIndex) 它将指定范围的数组按升序排列。要排序的范围从索引fromIndex(含)到索引toIndex(不包含)。如果fromIndex == toIndex, 则要排序的范围为空。
public static void parallelSort(double[] a) 它将指定的数组按升序排列。
public static void parallelSort(double[] a, int fromIndex, int toIndex) 它将指定范围的数组按升序排列。要排序的范围从索引fromIndex(含)到索引toIndex(不包含)。如果fromIndex == toIndex, 则要排序的范围为空。
public static void parallelSort(float[] a) 它将指定的数组按升序排列。
public static void parallelSort(float[] a, int fromIndex, int toIndex) 它将指定范围的数组按升序排列。要排序的范围从索引fromIndex(含)到索引toIndex(不包含)。如果fromIndex == toIndex, 则要排序的范围为空。
public static void parallelSort(int[] a) 它将指定的数组按升序排列。
public static void parallelSort(int[] a, int fromIndex, int toIndex) 它将指定范围的数组按升序排列。要排序的范围从索引fromIndex(含)到索引toIndex(不包含)。如果fromIndex == toIndex, 则要排序的范围为空。
public static void parallelSort(long[] a) 它将指定的数组按升序排列。
public static void parallelSort(long[] a, int fromIndex, int toIndex) 它将指定范围的数组按升序排列。要排序的范围从索引fromIndex(含)到索引toIndex(不包含)。如果fromIndex == toIndex, 则要排序的范围为空。
public static void parallelSort(short[] a) 它将指定的数组按升序排列。
public static void parallelSort(short[] a, int fromIndex, int toIndex) 它将指定范围的数组按升序排列。要排序的范围从索引fromIndex(含)到索引toIndex(不包含)。如果fromIndex == toIndex, 则要排序的范围为空。
公共静态< T扩展Comparable < ?超级T > > 无效parallelSort(T [] a) 根据对象的自然顺序, 将指定对象数组按升序排序。数组中的所有元素必须实现Comparable接口。此外, 数组中的所有元素必须相互可比较(也就是说, e1.compareTo(e2)不得对数组中的任何元素e1和e2抛出ClassCastException)。
公共静态< T7> void parallelSort(T [] a, Comparator < ?super T> cmp) 它根据指定的比较器引发的顺序对指定的对象数组进行排序。数组中的所有元素必须可以通过指定的比较器相互比较(即, c.compare(e1, e2)不得对数组中的任何元素e1和e2抛出ClassCastException。
公共静态< T扩展Comparable < ?超级T > > void parallelSort(T [] a, int fromIndex, int toIndex) 它将根据其对象的自然顺序将指定对象数组的指定范围按升序排序。要排序的范围从索引fromIndex(含)到索引toIndex(不包含)。 (如果fromIndex == toIndex, 则要排序的范围为空。)此范围内的所有元素必须实现Comparable接口。此外, 此范围内的所有元素都必须相互可比较(即e1.compareTo(e2)不得对数组中的任何元素e1和e2抛出ClassCastException)。
公共静态< T> void parallelSort(T [] a, int fromIndex, int toIndex, Comparator < ?super T> cmp) 它根据由指定比较器引起的顺序对指定对象数组的指定范围进行排序。要排序的范围从索引fromIndex(含)到索引toIndex(不包含)。 (如果fromIndex == toIndex, 则要排序的范围为空。)该范围中的所有元素必须可以由指定的比较器相互比较(即c.compare(e1, e2)不得对任何元素e1抛出ClassCastException和范围内的e2)。
Java并行数组排序示例
import java.util.Arrays; public class ParallelArraySorting { public static void main(String[] args) { // Creating an integer array int[] arr = {5, 8, 1, 0, 6, 9}; // Iterating array elements for (int i : arr) { System.out.print(i+" "); } // Sorting array elements parallel Arrays.parallelSort(arr); System.out.println("\nArray elements after sorting"); // Iterating array elements for (int i : arr) { System.out.print(i+" "); } } }

输出:
5 8 1 0 6 9 Array elements after sorting 0 1 5 6 8 9

Java并行数组排序示例:传递开始和结束索引在下面的示例中, 我们传递数组的开始索引和结束索引。第一个索引为包含索引, 结束索引为互斥索引, 即, 如果我们将0作为起始索引, 将4作为终止索引, 则只能排序0到3个索引元素。
如果开始索引> 结束索引, 则抛出IllegalArgumentException。
如果起始索引< 0或结束索引> a.length, 则抛出ArrayIndexOutOfBoundsException。
import java.util.Arrays; public class ParallelArraySorting { public static void main(String[] args) { // Creating an integer array int[] arr = {5, 8, 1, 0, 6, 9, 50, -3}; // Iterating array elements for (int i : arr) { System.out.print(i+" "); } // Sorting array elements parallel and passing start, end index Arrays.parallelSort(arr, 0, 4); System.out.println("\nArray elements after sorting"); // Iterating array elements for (int i : arr) { System.out.print(i+" "); } } }

【Java并行数组排序】输出:
5 8 1 0 6 9 50 -3 Array elements after sorting 0 1 5 8 6 9 50 -3

    推荐阅读