71

Object 类型的 Array 和 Object 类型的 ArrayList 哪个性能更好?

假设我们有一个Animal对象数组:Animal animal[] 和一个数组列表:ArrayList list<Animal>

现在我正在做 animal[10]list.get(10) 哪一个应该更快,为什么?

4

5 回答 5

81

很明显,array[10] 比 array.get(10) 更快,因为后者在内部执行相同的调用,但增加了函数调用的开销和额外的检查。

然而,现代 JIT 会在一定程度上优化这一点,您很少需要担心这一点,除非您有一个性能非常关键的应用程序并且这已被测量为您的瓶颈。

于 2013-10-15T20:05:19.497 回答
37

这里

ArrayList 在 Java 中由 Array 内部支持,ArrayList 中的任何调整大小操作都会降低性能,因为它涉及创建新数组并将内容从旧数组复制到新数组。


就性能而言,如果您知道 index ,则 Array 和 ArrayList 在添加或获取元素的恒定时间方面提供类似的性能。尽管 ArrayList 的自动调整大小可能会稍微减慢插入速度 Array 和 ArrayList 都是 Java 的核心概念,任何认真的 Java 程序员都必须熟悉 Array 和 ArrayList 或更一般的 Array 与 List 之间的这些差异。

于 2013-10-15T19:42:14.333 回答
21

在决定使用 Array 或 ArrayList 时,您的第一直觉真的不应该担心性能,尽管它们的性能确实不同。您首先关心的是您是否事先知道 Array 的大小。如果你不这样做,你自然会使用数组列表,只是为了功能。

于 2013-10-15T19:45:45.767 回答
11

我同意某人最近删除的帖子,即性能差异是如此之小,以至于除了极少数例外,(他因说永远不会而受到谴责)你不应该基于此做出设计决定。

在您的示例中,元素是对象,性能差异应该是最小的。

如果您正在处理大量,那么数组将在内存和时间方面提供明显更好的性能。

于 2013-10-15T20:07:31.923 回答
10

数组的性能更好。ArrayList 以性能为代价提供了额外的功能,例如“删除”。

于 2013-10-15T19:41:09.553 回答