为什么遍历列表比索引索引快?
阅读有关ADT列表的Java文档时,它说:
List接口提供了四种位置(索引)访问列表元素的方法。列表(如Java数组)从零开始。请注意,对于某些实现(例如,LinkedList类),这些操作可能在时间上与索引值成比例执行。因此,如果调用者不知道实现,则遍历列表中的元素通常比对其进行索引更可取。
这到底是什么意思?我不明白得出的结论。
回答:
在链接列表中,每个元素都有一个指向下一个元素的指针:
head -> item1 -> item2 -> item3 -> etc.
要访问item3
,您可以清楚地看到您需要从头经过每个节点直到到达item3,因为您不能直接跳转。
因此,如果我想打印每个元素的值,请编写以下代码:
for(int i = 0; i < 4; i++) { System.out.println(list.get(i));
}
这是怎么回事:
head -> print headhead -> item1 -> print item1
head -> item1 -> item2 -> print item2
head -> item1 -> item2 -> item3 print item3
这是 因为每次索引时,它都会从列表的开头重新开始并遍历每个项目。这意味着您的复杂性实际上O(N^2)
只是遍历列表!
如果相反,我这样做:
for(String s: list) { System.out.println(s);
}
那么会发生什么:
head -> print head -> item1 -> print item1 -> item2 -> print item2 etc.
全部在一个遍历中,即O(N)
。
现在,转到的另一种实现,List
该实现ArrayList
由一个简单数组支持。在这种情况下,上述两个遍历都是等效的,因为数组是连续的,因此它允许随机跳转到任意位置。
以上是 为什么遍历列表比索引索引快? 的全部内容, 来源链接: utcz.com/qa/403631.html