当前位置: 首页 > 教程 > Java8 >

Java8 并行数组排序

精华
小牛编辑
126浏览
2023-03-14

1 Java8 并行数组排序的介绍

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

2 Java8 并行数组排序的方法

方法 描述
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,则要排序的范围为空。
public static <T extends Comparable<? super T>> void parallelSort(T[] a) 根据对象的自然顺序,将指定对象数组按升序排序。数组中的所有元素必须实现Comparable接口。此外,数组中的所有元素都必须相互可比(即e1.compareTo(e2)不得对数组中的任何元素e1和e2抛出ClassCastException)。
public static <T7gt; void parallelSort(T[] a,Comparator<? super T> cmp) 根据指定的比较器引发的顺序对指定的对象数组进行排序。数组中的所有元素必须可以通过指定的比较器相互比较(即c.compare(e1,e2)不得对数组中的任何元素e1和e2抛出ClassCastException。
public static <T extends Comparable<? super T>> void parallelSort(T[] a,int fromIndex, int toIndex) 根据其元素的自然顺序,它将指定对象数组的指定范围按升序排序。要排序的范围从索引fromIndex(包括)到索引toIndex(不包括)。(如果fromIndex == toIndex,则要排序的范围为空。)此范围中的所有元素必须实现Comparable接口。此外,此范围内的所有元素都必须相互可比较(即e1.compareTo(e2)不得对数组中的任何元素e1和e2抛出ClassCastException)。
public static <T> void parallelSort(T[] a, int fromIndex, int toIndex, Comparator<? super T> cmp) 根据由指定比较器引起的顺序对指定对象数组的指定范围进行排序。要排序的范围从索引fromIndex(包括)到索引toIndex(不包括)。(如果fromIndex == toIndex,则要排序的范围为空。)该范围内的所有元素必须可以通过指定的比较器相互比较(即c.compare(e1,e2)不得对任何元素e1抛出ClassCastException和范围内的e2)。

3 Java8 并行数组排序案例1

/**
 * 小牛知识库网: https://www.xnip.cn
 */
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 

4 Java8 并行数组排序案例2

在下面的示例中,我们传递数组的开始索引和结束索引。第一个索引为包含索引,结束索引为互斥索引,即,如果我们将0作为起始索引,将4作为终止索引,则将仅对0到3个索引元素进行排序。

如果开始索引>结束索引,则抛出IllegalArgumentException。

如果起始索引<0或结束索引> a.length,则抛出ArrayIndexOutOfBoundsException。

/**
 * 小牛知识库网: https://www.xnip.cn
 */
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+" ");  
        }  
    }  
}  

输出结果为:

5 8 1 0 6 9 50 -3 
Array elements after sorting
0 1 5 8 6 9 50 -3