Java Collections.rotate()实现算法

Java Collections.rotate()实现算法,java,algorithm,Java,Algorithm,它对小列表使用杂耍算法,对大列表或链表使用反转算法。为什么不为小访问列表或随机访问列表使用块交换算法?在矢量的实验运行中,它的性能更好。我们无法告诉您为什么Java开发人员没有这样做: 也许他们不知道你所说的绩效结果 也许他们知道,但不认为性能差异会很大(在所有Java用例中) 也许他们已经尝试过你的想法,但没有明显的好处 也许他们意识到了这个问题,但却把其他问题放在了更优先的位置 请记住,Java团队(主要)由Oracle雇用,Oracle管理层为Java的发展制定议程和优先级 如果你只

它对小列表使用杂耍算法,对大列表或链表使用反转算法。为什么不为小访问列表或随机访问列表使用块交换算法?在矢量的实验运行中,它的性能更好。

我们无法告诉您为什么Java开发人员没有这样做:

  • 也许他们不知道你所说的绩效结果
  • 也许他们知道,但不认为性能差异会很大(在所有Java用例中)
  • 也许他们已经尝试过你的想法,但没有明显的好处
  • 也许他们意识到了这个问题,但却把其他问题放在了更优先的位置
请记住,Java团队(主要)由Oracle雇用,Oracle管理层为Java的发展制定议程和优先级


如果你只是出于好奇问这个问题,我们就到此为止

如果你问这个问题是因为你认为“应该做点什么”,那么我建议如下:

  • 开发一个像样的微基准测试来测试
    rotate()
    对于各种集合类型、各种集合大小的性能。(使用JMH…)

  • 对相关类进行代码修改,以“更好”的方式实现rotate()

  • 对您的版本和现有版本进行基准测试,并比较结果

  • 如果差异很大,请提交最新版本的OpenJDK补丁,以实现您的修改。将您的基准测试和结果作为支持证据


  • 这并不一定能达到您想要的结果,但它比提交RFE并依靠OpenJDK团队完成所有的工作更有可能成功

    OracleJDK8声明
    rotate()
    方法从1.4开始就存在,并且
    Collections
    类是由Josh Bloch和Neal Gafter编写的。我建议您仔细阅读1.4邮件列表,以找到当前实现的动机。感谢tipI,我们希望“我们不能告诉您为什么”回答,当然。实验运行的结果出现在Jon Bentley的“编程珍珠”中,直接出现在Collections.rotate()一节中方法参考建议查看详细信息。结果已记录。但是你告诉错人了。请看我的“如果你认为应该做点什么……”。