Object 类型的 Array 和 Object 类型的 ArrayList 哪个性能更好?
假设我们有一个Animal
对象数组:Animal animal[]
和一个数组列表:ArrayList list<Animal>
现在我正在做 animal[10]
, list.get(10)
哪一个应该更快,为什么?
Object 类型的 Array 和 Object 类型的 ArrayList 哪个性能更好?
假设我们有一个Animal
对象数组:Animal animal[]
和一个数组列表:ArrayList list<Animal>
现在我正在做 animal[10]
, list.get(10)
哪一个应该更快,为什么?
很明显,array[10] 比 array.get(10) 更快,因为后者在内部执行相同的调用,但增加了函数调用的开销和额外的检查。
然而,现代 JIT 会在一定程度上优化这一点,您很少需要担心这一点,除非您有一个性能非常关键的应用程序并且这已被测量为您的瓶颈。
从这里:
ArrayList 在 Java 中由 Array 内部支持,ArrayList 中的任何调整大小操作都会降低性能,因为它涉及创建新数组并将内容从旧数组复制到新数组。
就性能而言,如果您知道 index ,则 Array 和 ArrayList 在添加或获取元素的恒定时间方面提供类似的性能。尽管 ArrayList 的自动调整大小可能会稍微减慢插入速度 Array 和 ArrayList 都是 Java 的核心概念,任何认真的 Java 程序员都必须熟悉 Array 和 ArrayList 或更一般的 Array 与 List 之间的这些差异。
在决定使用 Array 或 ArrayList 时,您的第一直觉真的不应该担心性能,尽管它们的性能确实不同。您首先关心的是您是否事先知道 Array 的大小。如果你不这样做,你自然会使用数组列表,只是为了功能。
我同意某人最近删除的帖子,即性能差异是如此之小,以至于除了极少数例外,(他因说永远不会而受到谴责)你不应该基于此做出设计决定。
在您的示例中,元素是对象,性能差异应该是最小的。
如果您正在处理大量原语,那么数组将在内存和时间方面提供明显更好的性能。
数组的性能更好。ArrayList 以性能为代价提供了额外的功能,例如“删除”。