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()
,并为所有原始数据类型和可比对象重载。意思是,我们可以并行排序类型的数组: int 、 byte 、 short 、 char 、 double 、 float 等。比如对整数数组进行排序,我们可以使用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,则要排序的区域为空。 |
| 公共静态Comparator
产生的顺序对指定的对象数组进行排序。数组中的所有元素必须通过指定的Comparator
进行相互比较(也就是说,c.compare(e1,e2)不得为数组中的任何元素 e1 和 e2 引发 ClassCastException)。 |
| 公共静态Comparable
接口。此外,该范围内的所有元素必须相互可比较(即,e1.compareTo(e2)不得为数组中的任何元素 e1 和 e2 引发 ClassCastException)。 |
| 公共静态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