Arrays.sort与Arrays.parallelSort区别
概述
我们都使用过 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区别相关推荐
- java8 Arrays.sort 与Arrays.parallelSort
java8 Arrays.sort 与Arrays.parallelSort Sort方法 java8中Arrays.sort()方法有很多重载方式,先来看看对byte类型的排序 static voi ...
- Arrays.sort与Arrays.parallelSort
我们都使用Arrays.sort对对象和原始数组进行排序. 该API在下面使用合并排序或Tim排序对内容进行排序,如下所示: public static void sort(Object[] a) { ...
- bucket sort sample sort 并行_Java 中 Arrays.sort 和 Arrays.parallelSort 哪个更快?
1. 概述 我们都使用过 Arrays.sort() 对对象或原始数据类型数组(byte,short,int,long,char,float,double和boolean)进行排序.在 JDK 8 中 ...
- 深入学习java源码之 Arrays.sort()与Arrays.parallelPrefix()
深入学习java源码之 Arrays.sort()与Arrays.parallelPrefix() Comparator接口 能对不同类型的对象进行排序(当然排序依据还是基本类型),也不用自己实现排序 ...
- arrays.sort(._Arrays.sort与Arrays.parallelSort
arrays.sort(. 我们都使用Arrays.sort对对象和原始数组进行排序. 此API在下面使用合并排序或Tim排序对内容进行排序,如下所示: public static void sort ...
- Java的Arrays.sort()良心总结
C语言的stilib.h头文件中有qsort(),C++的STL库中有sort(),这些封装好的排序函数让我们避免了比赛手写排序,给我们解题带来了的便利.在Java的Arrays类中也封装好了类似的方 ...
- Java中的Arrays.sort(int[])
Arrays.sort(int[]) Arrays.sort(int[])使用的是quicksort+merge sort. 使用quicksort:当数组长度比较小(right-left<28 ...
- 更高效地刷OJ——Java中常用的排序方法,Array.sort(),Arrays.parallelSort(), Collections.sort()
对于几大传统的排序算法我在前面博客中已经介绍过了,如果有想要了解的同学可以去看这篇博客八大排序:冒泡排序,选择排序,插入排序,堆排序,希尔排序,归并排序,计数排序但是我们在刷题过程中如果题目中没有对排 ...
- java集合中中文排序_利用Collator和Collections.sort对list进行中文排序,注意与Arrays.sort的区别...
//两者的关系:1.Coollections.sort的内部实现是用Arrays.sort来实现的. //2.如果要排序的list中的对象已经实现了Comparable接口,那么可以用Arrays.s ...
最新文章
- 《 追风筝的人 》:“ 为你,千千万万遍 ” ...
- python考试名词解释_python公开课|python专有名词居然有这么多,python专有名词解释已做好...
- c语言实现顺序表源程序,C语言实现静态顺序表的实例详解
- 如何写出更好的代码(文末有福利)
- elsevier中elsarticle模板如何使用apa引用格式
- 温度检测单片机c语言程序设计,基于STC89C52单片机的温度检测系统设计
- DirectX修复工具出现0xc000007b错误——分析与解决
- html打印文字不显示图片,word打印预览时候没问题但是打印出来时候有些文字却不显示...
- 硬核,创业公司就应该技术选型 Spring Cloud Alibaba, 开箱即用
- 项目实训(十三)安装pun,pun的基础使用和概念
- 从零到大神,135排版训练营给你实实在在的排版!
- CCC3.0 蓝牙OOB配对
- 大图片显示在客户端,被压扁失真的问题
- FSOS森林模拟优化模型学习笔记
- 信息安全技术——(五)信息隐藏技术
- 2014秋冬季校招时间表,持续更新
- EmguCV学习(三)
- 程序员的十层楼,你属于哪一层?
- 基于Android13的系统启动流程分析(三)之FirstStageMain阶段
- Echarts地图柱状图问题
热门文章
- HTML如何给网页添加icon图标?
- flask开启debug调试模式
- 如何将VSCode添加到鼠标右键菜单
- 学习人工智能需要哪些必备的数学基础?
- centos6.9 yum安装中出现Loading mirror speeds from cached hostfile No package......
- 微信域名防屏蔽跳转系统-微信域名防拦截技术
- getElementByName与getElementByTagName的区别
- 打印机服务无法启动 错误代码1068
- PLSQL 常用语句
- 用 JavaScript 实现手势库 - 实现监听逻辑【前端组件化】