java arrays类方法parallelSort,学习总结

发布时间 2023-04-11 19:44:08作者: yuluoxingkong

Arrays.sort与Arrays.parallelSort区别

Arrays.sort()


Arrays.sort() 方法对对象或原始数据类型的数组进行排序。此方法中使用的排序算法是 Dual-Pivot Quicksort。 换句话说,它是快速排序算法的自定义实现,以实现更好的性能。

此方法是单线程的 ,有两种变体:

  • sort(array)–将整个数组按升序排序

  • sort(array, fromIndex, toIndex)–仅将从 fromIndex 到 toIndex 的元素排序

 

优点

缺点

快速处理较小的数据集

大型数据集的性能下降

 

没有利用系统的多个核心

 

 

 

 

 

Arrays.parallelSort()


此方法对对象或原始数据类型的数组进行排序。与 sort() 类似,它也有两个变体来对完整数组和部分数组进行排序

parallelSort() 在功能上有所不同。与 sort() 使用单个线程对数据进行顺序排序不同,它使用并行排序-合并排序算法。它将数组分成子数组,这些子数组本身先进行排序然后合并。

为了执行并行任务,它使用 ForkJoin 池。

但是我们需要知道,只有在满足某些条件时,它才会使用并行性。如果数组大小小于或等于 8192,或者处理器只有一个核心,则它将使用顺序的 Dual-Pivot Quicksort 算法。否则,它使用并行排序。

让我们总结一下使用它的优缺点:

优点

缺点

为大型数据集提供更好的性能

对于大小较小的数组,处理速度较慢

利用系统的多个核心

 

 

 

 

比较


现在,让我们看看在不同大小的数据集上两种方法怎样执行。以下数字是使用JMH 基准测试得出的。测试环境使用 AMD A10 PRO 2.1Ghz 四核处理器和 JDK 1.8.0_221: