阵列比arraylist更快吗?

时间:2012-07-23 22:58:18

标签: java arrays performance arraylist

我的直觉说阵列比arraylist更快,因为arraylists是使用在填充/丢失元素时调整大小的数组来实现的。

我只想确认这是否属实,暗示如果您知道要保留的元素数量,就没有理由使用arraylist。

8 个答案:

答案 0 :(得分:25)

任何性能差异都可以忽略不计,especially if you initialize your arraylist with an initialCapacity。以任何方式编写代码使其最易读和可维护,并尽量不要优化这样的东西,除非你通过测试确定你的性能受到了显着的影响。

使用ArrayList的潜在原因:

  • 有用的方法(contains等)
  • 实现IterableCollectionList,因此可用于许多基于接口的API调用。
  • 即使您现在“知道”您的收藏品的大小永远不会改变,但生活会给我们带来意想不到的要求。为什么在没有明显优势的情况下锁定自己的模式?

答案 1 :(得分:5)

ArrayList为您提供了原始数组所没有的许多功能。如果您知道元素的数量,则可以创建该大小的ArrayList。

new ArrayList<String>(100);

如果你担心ArrayList和数组之间的速度差异,你会担心错误的事情。它不太可能成为您代码中的瓶颈。如果是这样的话,几乎肯定会有一个比改变阵列更好的答案。

不要屈服于过早的优化。它会对你的代码造成严重破坏。大多数事情并不重要,只有少数事情可做。您只能通过分析代码来找到这些内容。试图让每个部分都快速完成是一种非常无效的方法,可以使整个部分变得快速。保持简洁的设计更加有效。这将为您提供必要的接缝,以便在实际需要的一两处引入优化。

答案 2 :(得分:2)

ArrayList在简单获取/设置时不能更快,但差异非常小,几乎在任何实际情况下都不值得担心。

List API有一些您可能需要的方法,即使您已经知道大小将被修复。以contains()为例。如果您希望ArrayList或API需要Iterator,您还必须使用List - 即使您知道列表的大小固定也是如此。

答案 3 :(得分:2)

正如其他人已经说过的那样,使用ArrayList,除非性能基准测试表明它是一个瓶子。

是的,由于访问者开销导致性能差异,这通常不会很重要。该一般规则的一个例外是,如果要在ArrayList中存储基本类型。当它将对象转换为Object或原始类型时,这将会产生重大的性能损失。

// easier to work with but slow
ArrayList<Double> slowList;

// faster primitive data array
double[] fasterList;

答案 4 :(得分:1)

是的,数组更快。如果运行数值算法,您可以看到明显的加速。

但是,对于正常的应用程序,您不必担心它。这是因为大多数运行时都花在做其他事情上。

答案 5 :(得分:0)

您不应过早优化代码,而应使用最适合您代码的数据结构。 正如你所说,经验法则可能是:

  1. 我不知道元素的数量或者它正在改变很多=&gt;列表(不要注意实现)

  2. 预先知道的元素数量=&gt;阵列

答案 6 :(得分:0)

如果你知道阵列的大小,确保它不会扩展或缩小。比使用数组。如果你不知道,数组列表是更好和稳定的。为了表现,这是你唯一关心的问题吗?继续前进..

答案 7 :(得分:-2)

数组比数组列表快得多。差异可能是几百个百分点,可能来自JVM优化。如果将数组变量声明为volatile,则会获得类似的性能。