gpt4 book ai didi

java - Java中Collection类的性能

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:40:01 26 4
gpt4 key购买 nike

全部,

我浏览了很多网站,这些网站发布了各种 Collection 类针对各种操作(即添加元素、搜索和删除)的性能。但我也注意到,它们都提供了不同的测试环境,即操作系统、内存、线程运行等。

我的问题是,是否有任何网站/ Material 在最佳测试环境的基础上提供相同的性能信息?也就是说,配置不应成为任何特定数据结构性能不佳的问题或催化剂。

[更新]:例如,HashSet 和 LinkedHashSet 插入一个元素的复杂度都是 O(1)。然而,Bruce Eckel 的测试声称 LinkedHashSet 的插入将比 HashSet 花费更多的时间 [http://www.artima.com/weblogs/viewpost.jsp?thread=122295]。那么我还应该使用 Big-Oh 表示法吗?

最佳答案

这是我的建议:

  1. 首先,不要优化 :) 并不是说​​我要您设计垃圾软件,而是要专注于设计和代码质量,而不是过早优化。假设您已经这样做了,现在您真的需要担心哪个集合最好,而不仅仅是纯粹的概念原因,让我们继续第 2 点
  2. Really, don't optimize yet (大致盗自 M. A. Jackson )
  3. 很好。所以你的问题是,即使你有最佳情况、最坏情况和平均情况的理论时间复杂度公式,你也注意到人们说的不同,实际设置与理论有很大不同。所以运行你自己的基准测试!您只能阅读这么多,而当您这样做时,您的代码不会自行编写。一旦你完成了理论,编写你自己的基准 - 为你的现实生活应用程序,而不是一些不相关的用于测试目的的小型应用程序 - 看看你的软件实际发生了什么以及为什么。然后选择最好的算法。这是经验主义的,可能被认为是浪费时间,但这是真正完美运行的唯一方法(直到你到达下一个点)。
  4. 既然您已完成此操作,您就拥有了史上最快的应用程序。直到 JVM 的下一次更新。或者您的特定性能瓶颈所依赖的操作系统的某些底层组件。你猜怎么着?也许您的客户有不同的客户。乐趣来了:您需要确保您的基准对其他人或在大多数情况下有效(或者为不同的情况编写代码很有趣)。您需要从用户那里收集数据。很多。然后你需要一遍又一遍地这样做,看看会发生什么,以及它是否仍然成立。然后相应地一遍又一遍地重新编写您的代码(- 现在终止 - Engineering Windows 7 blog 实际上是一个很好的例子,说明用户数据收集如何帮助做出有根据的决策以改善用户体验。

或者您可以……您知道……不优化。平台和编译器会发生变化,但好的设计应该 - 平均而言 - 表现足够好。

您还可以做的其他事情:

  • 查看 JVM 的源代码。这很有教育意义,你会发现一群隐藏的东西(我并不是说你必须使用它们......)
  • 在您的 TODO 列表中看到您需要处理的其他事情了吗?是的,靠近顶部但你总是跳过的那个,因为它太难或不够有趣。那个就在那里我们开始吧,先别管优化问题:它是潘多拉魔盒和莫比乌斯带的邪恶产物。你永远无法摆脱它,你会深深地后悔你试图用它来解决问题。

话虽这么说,但我不知道您为什么需要性能提升,所以也许您有一个非常正当的理由。

我并不是说选择正确的 Collection 并不重要。只有那些你知道为特定问题选择哪一个,并且你已经考虑过替代方案,然后你就完成了你的工作而不必感到内疚。这些集合通常具有语义含义,只要您尊重它就可以了。

关于java - Java中Collection类的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3973431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com