网站首页 > 教程分享 正文
本文由@牛旦教育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-11 Excel中的排序函数RANK,这6种使用技巧你一定不能错过
- 2024-10-11 七种排序算法 冒泡,选择,插入,希尔,快速,归并,堆
- 2024-10-11 深入浅出Redis:Redis的排序命令Sort
- 2024-10-11 「收藏」JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
- 2024-10-11 R语言sort和order排序函数(r语言给数据排序)
- 2024-10-11 vba如何通过调用sort方法实现排序?跟着文章解开心中的谜题!
- 2024-10-11 用SORTBY函数进行多条件排序 #excel技巧
- 2024-10-11 python数据排序-sorted与sort(python中的sorted排序)
- 2024-10-11 Linux基础知识之sort排序查看硬盘SN
- 2024-10-11 软件测试学习笔记丨Linux命令 sort排序
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)