1

可能重复:
Java 中的数组或列表。哪个更快?

使用 ArrayList 是否比 Java 中的简单数组贵得多?我有很多 ArrayList,在某些地方我可以使用数组,我不确定我是否应该把它们全部替换掉​​。

具体来说,我可以想象 ArrayList 的 get 比使用数组的运算符 [] 更昂贵。

谢谢

4

4 回答 4

3

它贵了一点点如果您的数据不是固定大小的,并且您除了迭代它之外还做了其他任何事情,那么值得使用它来ArrayList增加可读性和简单性。

一个例外是原始类型,原始数组更有可能获胜。

于 2013-01-06T02:14:21.727 回答
2

Donald Knuth 对优化做了以下两个陈述:

“我们应该忘记小的效率,比如大约 97% 的时间:过早的优化是万恶之源”(来自维基百科)

换句话说,除非您有一些基准表明您需要使用 Java 数组,否则请使用对您作为开发人员有利的那个;在我看来,这就是 ArrayList。

于 2013-01-06T02:15:17.147 回答
2

一般来说,如果你需要做一些对时间非常敏感的事情,使用ArrayListvsObject[]不会成为你的瓶颈所在。数据库查询、网络通信、磁盘访问和未优化的阵列等将变得更糟。

由于ArrayList不同步,因此性能通常不会比 差很多Object[]特别是如果您在添加元素之前指定大小。

于 2013-01-06T02:15:27.403 回答
2

应用程序成本的很大一部分是其设计、开发和维护。相比之下,运行应用程序的成本通常要小得多,不值得担心。因此,当您考虑效率时,您应该考虑您的效率以及那些必须在您之后维护您的应用程序的人(假设您的应用程序很有用;)

假设您有应用程序,其中性能是一个问题。一个常见的错误是仅仅猜测性能问题在哪里并“优化”这些问题。这种方法的问题在于它通常

  • 增加了复杂性
  • 降低可维护性。
  • 错过了最大的性能瓶颈
  • 可以产生很小或没有差异,甚至可以使性能更差。(上一次有人尝试优化我编写的一些代码时慢了 50%;)

您需要做的是执行一些实际测试并测量超出您特定可衡量业务需求的性能瓶颈。

对关键瓶颈进行更改后,您需要重新测试系统以确保它确实有帮助。

于 2013-01-06T10:06:54.477 回答