使用ArrayList比使用Java中的简单数组要昂贵得多吗?

时间:2013-01-06 02:11:24

标签: java

  

可能重复:
  Array or List in Java. Which is faster?

使用ArrayList比使用Java中的简单数组要昂贵得多吗? 我有很多ArrayList,在某些地方我可以使用数组,我不确定 如果我应该解决所有问题的麻烦。

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

由于

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

Donald Knuth就优化发表了以下两条声明:

“我们应该忘记效率低下,大约97%的时间说:过早的优化是所有邪恶的根源”(来自维基百科)

换句话说,除非你有一些基准指示你需要使用Java数组,然后使用那个让你作为开发人员受益的基准;在我看来,这是ArrayList。

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

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

假设您有性能问题的应用程序。一个常见的错误就是猜测性能问题在哪里以及"优化"那些。这种方法的问题在于它通常是

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

您需要做的是执行一些实际测试并衡量超出特定可衡量业务要求的性能瓶颈模糊的尽可能快的不具体或可衡量,在我的经历中通常没有意义。

一旦您对关键瓶颈进行了更改,您需要重新测试系统以确保它真正有用。