我正在迭代 String 对象列表的元素 一个接一个:
LinkedList list;
// add values to the list here
for (int i = 0; i < list.size(); i++)
System.out.println(list.get(i));
在这里,每次我在列表上调用 get() 时,列表都会从它的一端一直迭代到第 i 个元素——所以上面循环的复杂度是 O(n^2 ).
是 a.) 与上述增强型 for 循环相同,还是 b.) 是 for 循环将指针保持在其上次所在的位置,因此下面循环的复杂度为 O(n)?
for (String s:list)
System.out.println(s);
如果上面的情况 (b)——我认为是——在列表上使用迭代器是否有任何优势。这是简单的迭代——没有回头路可走。编辑: ..我的列表操作是只读的。
TIA。
最佳答案
您所说的“增强的 for 循环”(它实际上称为 foreach
循环)在内部对任何可迭代对象(包括链表)使用迭代器。
换句话说就是O(n)
它确实通过使用整数并以这种方式对其进行迭代来处理数组循环,但这很好,因为它在数组中表现良好。
手动使用迭代器的唯一优点是,如果您需要在迭代时删除部分或全部元素。
关于java - enhanced-for循环增强到什么程度呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24274124/