我的直觉说阵列比arraylist更快,因为arraylists是使用在填充/丢失元素时调整大小的数组来实现的。
我只想确认这是否属实,暗示如果您知道要保留的元素数量,就没有理由使用arraylist。
答案 0 :(得分:25)
任何性能差异都可以忽略不计,especially if you initialize your arraylist with an initialCapacity
。以任何方式编写代码使其最易读和可维护,并尽量不要优化这样的东西,除非你通过测试确定你的性能受到了显着的影响。
使用ArrayList
的潜在原因:
contains
等)Iterable
,Collection
和List
,因此可用于许多基于接口的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)
您不应过早优化代码,而应使用最适合您代码的数据结构。 正如你所说,经验法则可能是:
我不知道元素的数量或者它正在改变很多=&gt;列表(不要注意实现)
预先知道的元素数量=&gt;阵列
答案 6 :(得分:0)
如果你知道阵列的大小,确保它不会扩展或缩小。比使用数组。如果你不知道,数组列表是更好和稳定的。为了表现,这是你唯一关心的问题吗?继续前进..
答案 7 :(得分:-2)
数组比数组列表快得多。差异可能是几百个百分点,可能来自JVM优化。如果将数组变量声明为volatile,则会获得类似的性能。