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);
}