为什么数组列表比后进先出行为的链表更快?

Why is Array Lists faster than a Linked List for LIFO behaviour?

我编写了一个算法,它在数据结构的末尾添加和删除了很多项(基本上是后进先出)。

现在由于某种原因,当我用 ArrayList 执行此操作时,它比 LinkedList 快得多,即使 ArrayList 需要重定位的开销。它甚至不快一点。英里更快!

这是为什么?

好吧,每次你插入LinkedList,都会分配一个新的对象。当您插入 ArrayList 时,仅当没有更多 space 时才会进行分配。到那时它会加倍可用 space,并且在用完 space 之前您不会再次分配。所以在 LinkedList 中创建对象的成本几乎肯定是不同的。

来自this answer

remove 的时间复杂度对于 ArrayList 是 O(n-index),这是 O(1) 因为你正在删除最后一个元素,而对于 LinkedList.

在 LinkedList 的末尾插入和删除意味着一直迭代到最后一个元素。一旦指针在那里,它就非常简单。

如果 ArraList 中的元素数量已经达到 class' 数组的大小,则插入到 ArrayList 的成本会更高一些。这意味着它必须创建一个新数组并复制元素。除了它可以直接访问最后一个元素之外,这使得添加和删除元素变得非常简单。

P.S。您也可以考虑使用 Stack。不确定您的要求,但只是一个建议。