java - enhanced-for循环增强到什么程度呢?

标签 java list foreach iterator time-complexity

我正在迭代 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/

相关文章:

java - 将二进制文件读入字节数组

java - eclipse和tomcat调试

java - 在 Recyclerview Adapter (Android) 中操作数据的位置

list - 每次递增都会创建一个子列表的 Lisp 程序

javascript - 评估阵列的均匀性

PHP:PDO foreach 不工作

java - 自定义 CursorAdapter 未填充 ListView

c - 创建列表并打印其元素时出错

来自对象列表列表的 C# ListBox(以及更深层次的)

PHP PDO 如何在我的用户列表旁边显示我正在关注谁?