正在经历这里提到的Java8个特性。无法理解并行排序()的确切作用。有人能解释一下排序()
和并行排序()
之间的实际区别吗?
两种算法之间的主要区别如下:
1.rrays.sort():是顺序排序。
2.数组。ParallelSort():是一个并行排序。
API使用多个线程。
为了获得更多的结果,我想我们都必须等待Java8!!干杯
数组。并行排序():
该方法使用阈值,任何小于阈值的数组都使用数组#sort()API进行排序(即顺序排序)。阈值的计算考虑了机器的并行性、阵列的大小,计算公式如下:
private static final int getSplitThreshold(int n) {
int p = ForkJoinPool.getCommonPoolParallelism();
int t = (p > 1) ? (1 + n / (p << 3)) : n;
return t < MIN_ARRAY_SORT_GRAN ? MIN_ARRAY_SORT_GRAN : t;
}
一旦决定是并行还是串行对数组进行排序,现在就要决定如何将数组分成多个部分,然后将每个部分分配给一个Fork/Join任务,该任务负责对数组进行排序,然后再分配给另一个Fork/Join任务,该任务负责合并已排序的数组。JDK 8中的实现使用以下方法:
>
对前两部分进行排序,然后合并它们。
对接下来的两个部分进行排序,然后合并它们。并用上述步骤递归地重复每个零件,直到要排序的零件的大小不小于上述计算的阈值。
您还可以阅读Javadoc中的实现细节
排序算法是一种并行排序合并,它将数组拆分为子数组,这些子数组本身进行排序,然后进行合并。当子数组长度达到最小粒度时,将使用适当的数组对子数组进行排序。排序方法。如果指定数组的长度小于最小粒度,则使用适当的数组对其进行排序。排序方法。该算法要求工作空间不大于原始数组指定范围的大小。ForkJoin公共池用于执行任何并行任务。
大堆排序():
这使用合并排序或下面的蒂姆排序对内容进行排序。这一切都是按顺序完成的,即使合并排序使用分而治之技术,这一切都是按顺序完成的。
来源
并行排序使用线程-每个线程获取列表中的一个块,所有块并行排序。然后将这些已排序的块合并为一个结果。
当集合中有很多元素时,速度会更快。并行化(拆分成块和合并)的开销在较大的集合中变得相当小,但在较小的集合中却很大。
看看这个表(当然,结果取决于CPU、内核数量、后台进程等):
摘自此链接:http://www.javacodegeeks.com/2013/04/arrays-sort-versus-arrays-parallelsort.html
可能重复: 原始数组与ArrayList 在java中,列表和数组有什么区别?或数组和矢量之间的区别!
问题内容: 我有以下两个数组。我想要这两个数组之间的区别。也就是说,如何找到两个数组都不存在的值? 问题答案: 注意: 这个答案将返回的值是不存在的,它不会返回值不在。
主要内容:升序,降序我们在学习 Java 的过程中肯定会遇到对数组进行升序或降序等排序问题,本节主要介绍如何实现 Java 数组的升序和降序。Java 语言使用 Arrays 类提供的 sort() 方法来对数组进行排序。 升序 使用 java.util.Arrays 类中的 sort() 方法对数组进行升序分为以下两步: 导入 java.util.Arrays 包。 使用 Arrays.sort(数组名) 语法对数
这些声明有什么不同? 每种情况下的内存分配情况如何?
本文向大家介绍一维(1D)和二维(2D)数组之间的差异,包括了一维(1D)和二维(2D)数组之间的差异的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将了解一维数组和二维数组之间的区别。 一维数组 它有助于存储具有相似数据类型的元素的单个列表。 总字节数计算为变量数组的数据类型与数组大小的乘积。 C ++声明 Java声明 二维数组 它有助于存储“列表列表”或“数组数组”或“一维数组数组”
本文向大家介绍Java数组中最大质数和最小质数之间的差异,包括了Java数组中最大质数和最小质数之间的差异的使用技巧和注意事项,需要的朋友参考一下 问题陈述 对于给定的整数数组,其中所有元素均小于1000000。找到数组中最大素数和最小素数之间的差。 示例 解 使用Eratosthenes筛分法,这是找出小于给定数的所有素数的有效方法。然后,我们将找出最大和最小的质数以获得所需的差。 示例 以下是