【问题标题】:Do array(or ArrayList) and LinkedList perform the same when iterating? [duplicate]迭代时数组(或 ArrayList)和 LinkedList 执行相同吗? [复制]
【发布时间】:2018-09-18 07:11:06
【问题描述】:

我知道数组在获取和设置方面更快,而 LinkedList 更擅长添加和删除元素,但是在迭代时呢?更“传统”的for(i=0;i<intList.size();i++) 肯定会使 LinkedLists 变慢,因为您每次都必须获取索引 i 处的元素。但是如果我使用for(int i : intList) 会怎样?在这种情况下,它是如何在幕后工作的?例如:

LinkedList<Integer> intList = new LinkedList();
/*
populate list...
*/
for (int i : intList) {
    //do stuff
}

我想在遍历整个 List 时不需要获取特定元素,因此应该可以在性能大致相同的情况下进行某种循环实现。虽然我不知道这个例子中 for 是如何实现的,所以我不能确定是不是这样。

【问题讨论】:

  • 对于迭代,它们都是 O(1)。如果你想访问一个随机索引,那么 LinkedList 是 O(n) 而 ArrayList 是 O(1)。
  • 实际上,除了在大列表的头部或中间添加/删除项目之外,arraylist 在几乎所有方面都会更快。
  • 这些明确回答这个问题的类的源码你看不懂吗?
  • 渐近线是一样的。常数因素可能会显着支持ArrayList

标签: java performance


【解决方案1】:

当使用 foreach 时,它们都以相同的速度迭代,O(1)。如需更多信息,请阅读this post

【讨论】:

    猜你喜欢
    • 2012-01-16
    • 2014-01-13
    • 2012-03-24
    • 2023-04-10
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2011-09-05
    相关资源
    最近更新 更多