Java 循环的增强程度如何?

Java 循环的增强程度如何?,java,list,foreach,iterator,time-complexity,Java,List,Foreach,Iterator,Time Complexity,我正在迭代字符串对象列表中的元素 一个接一个: LinkedList list; // add values to the list here for (int i = 0; i < list.size(); i++) System.out.println(list.get(i)); 如果上面的案例(b)——我认为是这样的——在列表中使用迭代器有任何好处。这是一个简单的迭代——没有来回。编辑:…并且我的列表操作是只读的 蒂亚 您称之为“增强for循环”(实际上称为for

我正在迭代字符串对象列表中的元素 一个接一个:

LinkedList list;

// add values to the list here


for (int i = 0; i < list.size(); i++)  
    System.out.println(list.get(i));
如果上面的案例(b)——我认为是这样的——在列表中使用迭代器有任何好处。这是一个简单的迭代——没有来回。编辑:…并且我的列表操作是只读的

蒂亚

您称之为“增强for循环”(实际上称为
foreach
循环)的“增强for循环”在内部对任何iterable(包括链表)使用迭代器

换句话说,它是O(n)

它确实通过使用整数并以这种方式迭代来处理数组上的循环,但这很好,因为它在数组中表现良好


手动使用迭代器的唯一优点是,如果需要在迭代时删除部分或全部元素。

foreach
循环如下:

for (String s:list)   
    System.out.println(s);
会被分解成类似

for(Iterator<String> iter = list.iterator(); iter.hasNext();) {
    String s = iter.next();
    System.out.println(s);
}
for(迭代器iter=list.Iterator();iter.hasNext();){
字符串s=iter.next();
系统输出打印项次;
}

i、 e.这相当于使用
迭代器。而且比使用标准的
for
循环要好得多。

增强的for循环在某些情况下非常有用,例如需要搜索数组中的键时,它会按顺序一次获取一个元素。它消除了建立循环计数器、指定起始值和结束值的需要。因此,根据要求,可以使用simple for loop或enhanced for loop。

enhanced loop在后台使用迭代器[]如果它是关于列表的

在您的例子中,您有一个链表(它保留指向下一个先前项目的指针),因此通过使用增强的for(迭代器),您具有顺序读取复杂性
O(1)

如果使用建议的for,您将随机访问您的列表,对于LinkedList,这是
O(n)
,但是如果是ArrayList,它将是
O(1)

因此,如果在顺序读取复杂度<随机读取复杂度的列表中使用,它可以得到增强


[1]

…现在我又读了一遍你的问题,什么都没有。我会移除。我为我的失明道歉。@Kyllopardiun从问题中,OP已经理解了
迭代器和索引循环之间的区别。
for(Iterator<String> iter = list.iterator(); iter.hasNext();) {
    String s = iter.next();
    System.out.println(s);
}