看起来Java的原语排序数组在不久的将来可能会提高性能。 弗拉基米尔·雅罗斯拉夫斯基(Vladimir Yaroslavskiy)已在core-libs-dev邮件列表中发布了一条消息 ,标题为“ Dual-Pivot Quicksort的新优化版本 ”,其中Yaroslavskiy撰写了“ Dual-Pivot Quicksort的优化和更快版本”,他已“开始工作在……过去5年中。”

“ 新的Dual-Pivot Quicksort优化版本 ”消息包括有关Dual-Pivot Quicksort的一些历史背景; 突出显示了新版本在随机数据,“近乎结构化的数组”和“周期输入”方面的相对性能; 提供所涉及更改的全面摘要; 并提供用于更改的开放代码审查的链接 。

Dual-Pivot Quicksort算法于2009年引入Java。在2009年9月写的另一篇core-libs-dev邮件列表 帖子中 ,Yaroslavskiy写道:“ 用新的Dual-Pivot Quicksort替换java.util.Arrays中的Quicksort ”, “我想与您分享新的Dual-Pivot Quicksort,它比已知的实现方式(理论上和实验上)都快。 我想建议用新的替代JDK的Quicksort实现。” 在描述“新的Dual-Pivot Quicksort如何使用* two *枢轴元素”而不是所有早期方案使用的单个枢轴元素之前,该帖子描述了“经典Quicksort算法”方案以及对该方案的一些修改。

原始消息“ 用新的Dual-Pivot Quicksort替换java.util.Arrays中的Quicksort ”具有一些其他有趣的历史细节,并在此处突出显示。

  • 乔恩·本特利(Jon Bentley)在一封邮件中写道:“我认为弗拉基米尔(Vladimir)对Quicksort的贡献远远超过了我所做的任何事情,并在Hoare的原始设计和Sedgewick的分析上位居前列。” 该消息还提供了有关快速排序的发展的简短但有趣的历史背景。 该信息充分说明了雅罗斯拉夫斯基的贡献,但我认为它也充分说明了乔恩·本特利的性格。
  • 乔什·布洛赫(Josh Bloch)在此消息中粘贴了一封电子邮件,其中说:“我相信,此代码不太可能最终被移植到多种语言并以Bentley和McIlroy很好的方式广泛部署(已成功实现20种成功年)。” 事实证明是这种情况,因为其他语言(或语言库)在某种程度上采用了该算法,并带有JavaScript , Python和Ruby等示例。

通过在原始数组类型上使用Arrays.sort()方法的重载版本,可以看到新的改进版本的Dual-Pivot Quicksort可能带来的性能改进。 搜索词“ Dual-Pivot Quicksort”在与Arrays类的JDK 9版本相关的Javadoc生成HTML输出中出现14次:

  • Arrays.sort(int [])
  • Arrays.sort(int [],int,int)
  • Arrays.sort(long [])
  • Arrays.sort(long [],int,int)
  • Arrays.sort(short [])
  • Arrays.sort(short [],int,int)
  • Arrays.sort(char [])
  • Arrays.sort(char [],int,int)
  • Arrays.sort(byte [])
  • Arrays.sort(byte [],int,int)
  • Arrays.sort(float [])
  • Arrays.sort(float [],int,int)
  • Arrays.sort(double [])
  • Arrays.sort(double [],int,int)

由于quicksort仅用于对基元进行排序,因此对双数据点quicksort的这些性能增强仅影响基元上的方法,而不会影响倾向于使用合并排序的Arrays.sort(Object [])之类的方法。

据我所知,没有针对这些性能改进的特定Java版本,但是它们似乎已经进行了广泛的审查和测试,因此与基元数组排序有关的性能改进可能很快就会到来。您附近的Java版本。

参考文献

  • Dual-Pivot Quicksort算法 (2009年9月)
  • 用新的Dual-Pivot Quicksort替换java.util.Arrays中的Quicksort (2009年9月)
  • Dual-Pivot Quicksort的新优化版本 (2018年1月)
    • 关联代码更改
  • 证明JDK的Dual Pivot Quicksort正确 (2017年8月)
  • 为什么双轴Quicksort快速? (2015年11月)
  • 工程速查 (2013年1月)
  • 快速分拣–三向和双枢轴 (2013年6月)
  • StackOverflow.com上的相关线程:
    • Yaroslavskiy的双重枢纽快速排序算法

翻译自: https://www.javacodegeeks.com/2018/01/faster-sorting-arrays-primitives-coming-java.html

Java更快地对基元数组进行排序?相关推荐

  1. 运动基元_Java更快地对基元数组进行排序?

    运动基元 看来,在不久的将来,Java中的原语排序数组可能会提高性能. 弗拉基米尔·雅罗斯拉夫斯基(Vladimir Yaroslavskiy)已在core-libs-dev邮件列表中发布了一条消息 ...

  2. Arrays.deepToString() 方法同时适用于基元数组和对象数组

    Arrays.deepToString() 方法同时适用于基元数组和对象数组: import java.util.*;public class MultiDimWrapperArray {public ...

  3. php array 数组去重,更快的方式实现 PHP 数组去重

    如何学习PHP array_flip()定义和用法 array_flip() 函数返回一个反转后的数组,如果同一值出现了多次,则最后一个键名将作为它的值,所有其他的键名都将丢失. 如果原数组中的值的数 ...

  4. php 数组去重函数,【译】更快的方式实现PHP数组去重

    概述 使用PHP的array_unique()函数允许你传递一个数组,然后移除重复的值,返回一个拥有唯一值的数组.这个函数大多数情况下都能工作得很好.但是,如果你尝试在一个大的数组里使用array_u ...

  5. java+的数组分割符_Java:使用分隔符连接基元数组

    小编典典 这是我想出的.有几种方法可以执行此操作,它们取决于您使用的工具. 使用StringUtils和ArrayUtils来自Common Lang: int[] arr = new int[] { ...

  6. java原始类型排序_海牛部落 java 系列教程:(5)数组和排序

    1 数组 数组是编程语言中最常见的的数据结构,其本身是个引用类型数据. java数组要求所有的数组元素具有相同的数据类型. 一旦数组的初始化完成,数组在内存中所占的空间将被固定下来,数组的长度将不可变 ...

  7. 纹理和基元_Java的精妙之处,包括基元和变量参数数组

    纹理和基元 在我最近的博客文章Arrays.hashCode()与 DZone联合版本的评论中提出了一个有趣的问题. Objects.hash() ". 该评论的作者建立了一些示例,这些示例 ...

  8. 服务器webpack构建性能,[译] 优化 WEBPACK 以更快地构建 REACT

    如果您的 Webpack 构建缓慢且有大量的库 -- 别担心,有一种方法可以提高增量构建的速度!Webpack 的 DLLPlugin 允许您将所有的依赖项构建到一个文件中.这是一个取代分块的很好选择 ...

  9. 几年经验才能算java高级,快来看鸭~

    JAVA教程:高级Java开发人员是什么样的?很多人会用工作年限来衡量软件开发人员是否达到高级的水平,很多人认为是5年以上才能达到高级;也有人认为多年的经验只是一个数字,真正重要的是知识.技能和应用经 ...

最新文章

  1. linux 压缩排除某个文件夹,linux tar压缩排除 某类型文件 某个文件夹
  2. 再谈 iptables 防火墙的 指令配置
  3. C++中拷贝构造函数的形参为什么要是const引用
  4. 数组模拟栈和队列板子
  5. STDIN_FILENO和stdin区别
  6. vue-resource jsonp跨域问题解决方法
  7. 【Git、GitHub、GitLab】四 Git文件重命名的简单方法以及使用git log查看版本演变历史
  8. java调用python代码
  9. 数据库与表的操作之SQL Server 2012中的数据类型
  10. 惠普局域网共享打印机设置_打印机usb转网络?打印机共享怎么设置?怎样设置hp打印机共享器操作方法...
  11. 国产图形化的msf——Viper初体验
  12. 杭州好玩景点攻略470
  13. phaser3场景中的图片缩放scale
  14. php不使用第三变量互换,总结PHP不用第三个变量交换两个变量的值的几种方法
  15. 平面解析几何----焦点弦上焦半径长度符合的条件1/AF+1/BF=2/ep
  16. VisionPro基础篇(一): VisionPro界面介绍
  17. 网络安全和黑客技能:15本必读书籍推荐
  18. 世界杯---人生就是一届又一届世界杯
  19. 最简单安全有效的防盗技术和防脱机外挂技术。研发部门可以借鉴使用。
  20. 视频笔记_所长林超跨学科工具箱

热门文章

  1. 深入理解分布式系统中的缓存架构(下)
  2. 深入理解分布式系统中的缓存架构(上)
  3. 这些分布式事务的解决方案,你都知道吗
  4. @Resource,@Autowired,@Inject3种注入方式详解
  5. 获取Spring的ApplicationContext的几种方式
  6. Tomcat配置虚拟内存
  7. 《朝花夕拾》金句摘抄(五)
  8. 中控指纹采集器开发指纹识别项目(说明)
  9. js引擎执行代码的基本流程
  10. IDEA把Springboot打成可执行jar包,内嵌tomcat 这个可以用