当前位置: 首页 > 知识库问答 >
问题:

数组之间的差异。sort()和数组。并行排序()

岑畅
2023-03-14

正在经历这里提到的Java8个特性。无法理解并行排序()的确切作用。有人能解释一下排序()并行排序()之间的实际区别吗?

共有3个答案

邵耀
2023-03-14

两种算法之间的主要区别如下:

1.rrays.sort():是顺序排序。

  • API使用单线程进行操作
  • API执行该操作所需的时间稍长一些

2.数组。ParallelSort():是一个并行排序。

API使用多个线程。

  • 与Sort()相比,API花费的时间更少

为了获得更多的结果,我想我们都必须等待Java8!!干杯

吕德惠
2023-03-14

数组。并行排序():

该方法使用阈值,任何小于阈值的数组都使用数组#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公共池用于执行任何并行任务。

大堆排序():

这使用合并排序或下面的蒂姆排序对内容进行排序。这一切都是按顺序完成的,即使合并排序使用分而治之技术,这一切都是按顺序完成的。

来源

仉峻
2023-03-14

并行排序使用线程-每个线程获取列表中的一个块,所有块并行排序。然后将这些已排序的块合并为一个结果。

当集合中有很多元素时,速度会更快。并行化(拆分成块和合并)的开销在较大的集合中变得相当小,但在较小的集合中却很大。

看看这个表(当然,结果取决于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筛分法,这是找出小于给定数的所有素数的有效方法。然后,我们将找出最大和最小的质数以获得所需的差。 示例 以下是