【发布时间】: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