网站首页 > java教程 正文
本文由@牛旦教育IT课堂原创翻译
原文:https://www.baeldung.com/java-arrays-sort-vs-parallelsort
0.摘要
我们都用过Array.sort()来对对象或基本类型数组进行排序。在JDK 8中,增强的API来提供一个新方法:Arrays.parallelSort()。
本教程中,我们来比较sort()和parallelSort()方法的具体情况。
1.Arrays.sort()
Arrays.sort()方法对数组对象或基本类型排序,其基本算法是Dual-Pivot Quicksort(对称快速排序)。换句话说,它是快速排序算法的自定义实现,以获得更好的性能。
这个方法是单线程的,它有两个辩题方法:
- l sort(array) – 将整个数组按升序排序
- l sort(array, fromIndex, toIndex) – 只对从fromIndex到toIndex的元素排序
来看两个变体方法的代码示例:
@Test
public void givenArrayOfIntegers_whenUsingArraysSortMethod_thenSortFullArrayInAscendingOrder() {
int[] array = { 10, 4, 6, 2, 1, 9, 7, 8, 3, 5 };
int[] expected = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Arrays.sort(array);
assertArrayEquals(expected, array);
}
@Test
public void givenArrayOfIntegers_whenUsingArraysSortWithRange_thenSortRangeOfArrayAsc() {
int[] array = { 10, 4, 6, 2, 1, 9, 7, 8, 3, 5 };
int[] expected = { 10, 4, 1, 2, 6, 7, 8, 9, 3, 5 };
Arrays.sort(array, 2, 8);
assertArrayEquals(expected, array);
}
简要总结一下这种方法的利弊:
Arrays.parallelSort()
此方法也可对对象或基本类型数组进行排序。与sort()类似,它也有两个变体排序方法,以实现对全数组和部分数组排序,来看两个示例:
@Test
public void givenArrayOfIntegers_whenUsingArraysParallelSortMethod_thenSortFullArrayInAscendingOrder() {
int[] array = { 10, 4, 6, 2, 1, 9, 7, 8, 3, 5 };
int[] expected = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Arrays.parallelSort(array);
assertArrayEquals(expected, array);
}
@Test
public void givenArrayOfIntegers_whenUsingArraysParallelSortWithRange_thenSortRangeOfArrayAsc() {
int[] array = { 10, 4, 6, 2, 1, 9, 7, 8, 3, 5 };
int[] expected = { 10, 4, 1, 2, 6, 7, 8, 9, 3, 5 };
Arrays.parallelSort(array, 2, 8);
assertArrayEquals(expected, array);
}
方法parallelSort()在功能上与前者是不同的。也就是说,与使用单个线程对数据进行顺序排序的sort()不同,它使用并行的sort-merge(合并排序)算法。它将数组拆分成子数组,子数组本身进行排序,然后合并。
对于执行的并行任务,它使用ForkJoin池。
但是我们要知道,它只在满足特定条件时才使用并行特性。如果数组大小小于或等于8192,或者处理器只有一个核心,那么它使用顺序Dual-Pivot快速排序算法。否则,它使用并行排序。
总结一下此种排序的利弊:
两者比较
现在让我们看看这两个方法在不同大小的数据集上是如何执行的。下面的数字是使用JMH基准(https://www.baeldung.com/java-microbenchmark-harness)测试得出的。测试环境使用AMD A10 PRO 2.1Ghz四核处理器和JDK 1.8.0_221:
总结
本篇短文中,我们了解了sort()和parallelSort()的区别。
根据性能结果,我们可以得出结论,当需要对大型数据集进行排序时,parallelSort()可能是更好的选择。但是,对于较小大小的数组,最好使用sort(),因为它提供了更好的性能。
好了,本就到这里,各位具体使用中,根据自己的实际需要取舍吧。
点个赞,分享出去吧。^_^
猜你喜欢
- 2024-10-22 Java几种排序方式(java排序的方法有哪些)
- 2024-10-22 Java排序算法——归并排序(Merge Sort)
- 2024-10-22 Java 集合中的排序算法浅析(java集合排序工具类)
- 2024-10-22 数组排序与二分查找法(二分查找排序树)
- 2024-10-22 LeetCode基础算法题第85篇:求有序数组的平方再排序
- 2024-10-22 深入理解Java中Comparable和Comparator排序
- 2024-10-22 Java常见知识之冒泡排序#冒泡排序
- 2024-10-22 Java数组之Arrays方法(java array数组)
- 2024-10-22 常用集合的排序方法——Java进阶知识讲义系列(七)
- 2024-10-22 Java数组(java数组初始化)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)