考虑:
List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
System.out.println(item);
}
如果不使用for each语法,等价的for循环会是什么样子?
考虑:
List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
System.out.println(item);
}
如果不使用for each语法,等价的for循环会是什么样子?
当前回答
每个习惯用法的Java只能应用于*Iterable类型的数组或对象。这个习惯用法是隐含的,因为它确实有迭代器支持。迭代器由程序员编程,通常使用整数索引或节点(取决于数据结构)来跟踪其位置。从理论上讲,它比常规的for循环慢,至少对于数组和列表等“线性”结构来说是这样,但它提供了更大的抽象性。
其他回答
代码应为:
import java.util.ArrayList;
import java.util.List;
public class ForLoopDemo {
public static void main(String[] args) {
List<String> someList = new ArrayList<String>();
someList.add("monkey");
someList.add("donkey");
someList.add("skeleton key");
// Iteration using For Each loop
System.out.println("Iteration using a For Each loop:");
for (String item : someList) {
System.out.println(item);
}
// Iteration using a normal For loop
System.out.println("\nIteration using normal For loop: ");
for (int index = 0; index < someList.size(); index++) {
System.out.println(someList.get(index));
}
}
}
每个的构造也对数组有效。例如
String[] fruits = new String[] { "Orange", "Apple", "Pear", "Strawberry" };
for (String fruit : fruits) {
// fruit is an element of the `fruits` array.
}
这基本上等同于
for (int i = 0; i < fruits.length; i++) {
String fruit = fruits[i];
// fruit is an element of the `fruits` array.
}
因此,总体总结如下:[nsayer]以下是正在发生的事情的较长形式:
for(Iterator<String>i=someList.iiterator();i.hasNext();){字符串项=i.next();System.out.println(项);}注意,如果您需要使用i.移除();或访问实际的迭代器不能使用for(:)习惯用法,因为实际的迭代器只是推断。
[丹尼斯·布埃诺]
nsayer的回答暗示了这一点,但是值得注意的是,OP用于(..)当“someList”为任何实现的东西java.lang.Iterable--它没有成为列表,或来自甚至你自己的类型,因此,可以与此一起使用语法。
还要注意,在原始问题中使用“foreach”方法确实有一些限制,例如在迭代过程中无法从列表中删除项目。
新的for循环更容易阅读,并且不需要单独的迭代器,但只有在只读迭代过程中才能真正使用。
nsayer的答案暗示了这一点,但值得注意的是,当“someList”是实现java.lang.Iterable的任何东西时,OP的for(..)语法都会起作用——它不必是列表,也不必是java.util的集合。因此,甚至您自己的类型也可以与此语法一起使用。
public static Boolean Add_Tag(int totalsize)
{
List<String> fullst = new ArrayList<String>();
for(int k=0; k<totalsize; k++)
{
fullst.addAll();
}
}