Java教程

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,则要排序的范围为空。
public static <T extends Comparable<? super T>> void parallelSort(T[] a) 根据对象元素的自然顺序将指定的对象数组升序排列。数组中的所有元素必须实现Comparable接口。此外,数组中的所有元素都必须相互可比(即e1.compareTo(e2)不得对数组中的任何元素e1和e2抛出ClassCastException)。
public static <T> 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)。

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+" ");
    }
  }
}
输出:
5 8 1 0 6 9 50 -3 
Array elements after sorting
0 1 5 8 6 9 50 -3 
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4