我编写了一个算法,它有很多追加和删除项目到数据结构的末尾(基本上是先到后出)。
现在由于某种原因,当我使用ArrayList
执行此操作时,它比LinkedList
快得多,即使ArrayList需要重定位的开销。它甚至没有快一点。里程更快!
为什么会这样?
答案 0 :(得分:6)
好吧,每次插入LinkedList时,都会分配一个新对象。插入ArrayList时,只有在没有空间的情况下才会进行分配。此时它会占用可用空间,并且在空间不足之前不会再分配。因此,在LinkedList中创建对象的成本几乎肯定是差异。
答案 1 :(得分:-2)
remove
时间复杂度为ArrayList
的O(n-index),当您删除最后一个元素时为O(1),而{{1}为O(n) }。
答案 2 :(得分:-2)
在LinkedList的末尾插入和删除意味着一直迭代它以到达最后一个元素。一旦指针在那里就很简单了。
如果ArraList中的元素数量已经达到类'数组的大小,那么插入ArrayList要贵一些。这意味着它必须创建一个新数组并复制元素。除了它可以直接访问最后一个元素,这使得添加和删除元素变得非常简单。
P.S。你也可以考虑使用Stack。不确定你的要求,但只是一个消化。