【问题标题】:LinkedList<E> vs ArrayList<E> costLinkedList<E> 与 ArrayList<E> 成本
【发布时间】:2013-09-08 23:21:37
【问题描述】:

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

我想确保我理解正确。

在我当前的用例中,我有多种情况将对象存储在 List 结构中。每次运行时列表中的对象数量都会发生变化,并且从不需要随机访问列表中的对象。基于这些信息,我选择使用 LinkedLists 和 ListIterators 来遍历列表的全部内容。

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

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

如果这是一个错误的选择,请帮助我了解原因。

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

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

一如既往,我非常感谢大家的意见!

【问题讨论】:

    标签: java data-structures complexity-theory big-o


    【解决方案1】:

    LinkedListArrayList 的迭代应该花费大致相同的时间来完成,因为在每种情况下,从一个元素步进到下一个元素的成本都是一个常数。不过,ArrayList 可能由于引用的局部性而更好一些,因此可能值得分析一下会发生什么。

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

    也就是说,您对为什么使用LinkedList 的分析似乎是合理的。同样,分析程序并查看 ArrayList 对于您的用例是否真的会更快。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2011-08-16
      • 1970-01-01
      • 2020-04-26
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      相关资源
      最近更新 更多