概述


我们都使用过 Arrays.sort() 对对象或原始数据类型数组(byte,short,int,long,char,float,double和boolean)进行排序。在 JDK 8 中,创造者增强了 API 以提供一种新方法:Arrays.parallelSort()。

在文章中,我们将对 sort() 和 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:

数组大小

Arrays.sort()

Arrays.parallelSort()

1000

0.048

0.054

10000

0.847

0.425

100000

7.570

4.395

1000000

65.301

37.998

结论


在这篇快速文章中,我们看到了 sort() 和 parallelSort() 的不同之处。

根据性能结果,我们可以得出结论,当我们要排序的数据集很大时,parallelSort() 可能是更好的选择。但是,在数组较小的情况下,最好使用 sort(),因为它可以提供更好的性能。

Arrays.sort与Arrays.parallelSort区别相关推荐

  1. java8 Arrays.sort 与Arrays.parallelSort

    java8 Arrays.sort 与Arrays.parallelSort Sort方法 java8中Arrays.sort()方法有很多重载方式,先来看看对byte类型的排序 static voi ...

  2. Arrays.sort与Arrays.parallelSort

    我们都使用Arrays.sort对对象和原始数组进行排序. 该API在下面使用合并排序或Tim排序对内容进行排序,如下所示: public static void sort(Object[] a) { ...

  3. bucket sort sample sort 并行_Java 中 Arrays.sort 和 Arrays.parallelSort 哪个更快?

    1. 概述 我们都使用过 Arrays.sort() 对对象或原始数据类型数组(byte,short,int,long,char,float,double和boolean)进行排序.在 JDK 8 中 ...

  4. 深入学习java源码之 Arrays.sort()与Arrays.parallelPrefix()

    深入学习java源码之 Arrays.sort()与Arrays.parallelPrefix() Comparator接口 能对不同类型的对象进行排序(当然排序依据还是基本类型),也不用自己实现排序 ...

  5. arrays.sort(._Arrays.sort与Arrays.parallelSort

    arrays.sort(. 我们都使用Arrays.sort对对象和原始数组进行排序. 此API在下面使用合并排序或Tim排序对内容进行排序,如下所示: public static void sort ...

  6. Java的Arrays.sort()良心总结

    C语言的stilib.h头文件中有qsort(),C++的STL库中有sort(),这些封装好的排序函数让我们避免了比赛手写排序,给我们解题带来了的便利.在Java的Arrays类中也封装好了类似的方 ...

  7. Java中的Arrays.sort(int[])

    Arrays.sort(int[]) Arrays.sort(int[])使用的是quicksort+merge sort. 使用quicksort:当数组长度比较小(right-left<28 ...

  8. 更高效地刷OJ——Java中常用的排序方法,Array.sort(),Arrays.parallelSort(), Collections.sort()

    对于几大传统的排序算法我在前面博客中已经介绍过了,如果有想要了解的同学可以去看这篇博客八大排序:冒泡排序,选择排序,插入排序,堆排序,希尔排序,归并排序,计数排序但是我们在刷题过程中如果题目中没有对排 ...

  9. java集合中中文排序_利用Collator和Collections.sort对list进行中文排序,注意与Arrays.sort的区别...

    //两者的关系:1.Coollections.sort的内部实现是用Arrays.sort来实现的. //2.如果要排序的list中的对象已经实现了Comparable接口,那么可以用Arrays.s ...

最新文章

  1. 《 追风筝的人 》:“ 为你,千千万万遍 ” ...
  2. python考试名词解释_python公开课|python专有名词居然有这么多,python专有名词解释已做好...
  3. c语言实现顺序表源程序,C语言实现静态顺序表的实例详解
  4. 如何写出更好的代码(文末有福利)
  5. elsevier中elsarticle模板如何使用apa引用格式
  6. 温度检测单片机c语言程序设计,基于STC89C52单片机的温度检测系统设计
  7. DirectX修复工具出现0xc000007b错误——分析与解决
  8. html打印文字不显示图片,word打印预览时候没问题但是打印出来时候有些文字却不显示...
  9. 硬核,创业公司就应该技术选型 Spring Cloud Alibaba, 开箱即用
  10. 项目实训(十三)安装pun,pun的基础使用和概念
  11. 从零到大神,135排版训练营给你实实在在的排版!
  12. CCC3.0 蓝牙OOB配对
  13. 大图片显示在客户端,被压扁失真的问题
  14. FSOS森林模拟优化模型学习笔记
  15. 信息安全技术——(五)信息隐藏技术
  16. 2014秋冬季校招时间表,持续更新
  17. EmguCV学习(三)
  18. 程序员的十层楼,你属于哪一层?
  19. 基于Android13的系统启动流程分析(三)之FirstStageMain阶段
  20. Echarts地图柱状图问题

热门文章

  1. HTML如何给网页添加icon图标?
  2. flask开启debug调试模式
  3. 如何将VSCode添加到鼠标右键菜单
  4. 学习人工智能需要哪些必备的数学基础?
  5. centos6.9 yum安装中出现Loading mirror speeds from cached hostfile No package......
  6. 微信域名防屏蔽跳转系统-微信域名防拦截技术
  7. getElementByName与getElementByTagName的区别
  8. 打印机服务无法启动 错误代码1068
  9. PLSQL 常用语句
  10. 用 JavaScript 实现手势库 - 实现监听逻辑【前端组件化】