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