为什么数组列表比LIFO行为的链接列表更快?

时间:2015-04-22 00:28:47

标签: java arraylist linked-list

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

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

为什么会这样?

3 个答案:

答案 0 :(得分:6)

好吧,每次插入LinkedList时,都会分配一个新对象。插入ArrayList时,只有在没有空间的情况下才会进行分配。此时它会占用可用空间,并且在空间不足之前不会再分配。因此,在LinkedList中创建对象的成本几乎肯定是差异。

答案 1 :(得分:-2)

来自this answer

remove时间复杂度为ArrayList的O(n-index),当您删除最后一个元素时为O(1),而{{1}为O(n) }。

答案 2 :(得分:-2)

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

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

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

相关问题