关于java:LinkedList vs ArrayList cost

LinkedList vs ArrayList cost

我在这里读了很多问题,讨论在Java中使用ArrayLists和LinkedLists的成本。到目前为止我见过的最有用的一个是:何时使用LinkedList over ArrayList?。

我想确定我正确理解。

在我目前的用例中,我有多种情况,我将对象存储在List结构中。每次运行时列表中的对象数都会更改,并且永远不需要随机访问列表中的对象。根据这些信息,我选择使用LinkedLists和ListIterators来遍历列表的整个内容。

例如,我的代码可能如下所示:

1
2
3
for (Object thisObject : theLinkedList) {
    // do something
}

如果这是一个糟糕的选择,请帮助我理解原因。

我目前的理解是,使用迭代解决方案遍历LinkedList中的整个对象列表会产生O(n)成本。由于没有对列表的随机访问(例如,需要获取项目#3),我目前的理解是这与循环遍历ArrayList的内容并使用索引请求每个元素基本相同。

假设我事先知道要在列表中存储的对象数,我当前的想法是,最好将ArrayList初始化为适当的大小,并完全切换到该结构而不使用ListIterator。这个逻辑是否合理?

一如既往,我非常感谢大家的投入!


LinkedListArrayList的迭代应该花费大致相同的时间来完成,因为在每种情况下从一个元素步进到下一个元素的成本是常数。 但是,由于引用的局部性,ArrayList可能会更好一点,因此可能需要进行分析才能看到发生了什么。

如果保证总会有固定数量的元素,并且在随机位置不会有插入和删除,那么原始数组可能是一个不错的选择,因为它非常快且针对这种情况进行了优化。

也就是说,您对LinkedList使用原因的分析似乎很合理。 同样,对程序进行概要分析并查看ArrayList对于您的用例实际上是否会更快也没有什么坏处。

希望这可以帮助!