每个'循环'的Java如何工作?
考虑:
List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
System.out.println(item);
}
就相当于什么for
循环看起来像不使用每个语法?
for (Iterator<String> i = someIterable.iterator(); i.hasNext();) {
String item = i.next();
System.out.println(item);
}
请注意,如果你需要使用i.remove();
在你的循环中,或以某种方式访问实际的迭代器,你不能使用for ( : )
:)成语,因为实际的迭代器只是被推断出来的。
正如Denis Bueno指出的那样,此代码适用于实现Iterable
接口的任何对象。
另外,如果for (:)
成语的右侧是一个array
而不是一个Iterable
对象,则内部代码将使用一个int index计数器并相反检查array.length
。 请参阅Java语言规范。
每个构造也适用于数组。 例如
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.iterator(); i.hasNext(); ) {
String item = i.next();
System.out.println(item);
}
请注意,如果你需要使用i.remove(); 在你的循环中,或以某种方式访问实际的迭代器,你不能使用for(:)成语,因为实际的Iterator只是被推断出来的。
[丹尼斯布埃诺]
它的含义是nsayer的答案,但值得注意的是,当“someList”是实现java.lang.Iterable的任何东西时,OP的for(..)语法都可以工作 - 它不一定是列表或者某个集合java.util中。 因此,即使您自己的类型也可以使用该语法。
这是一个不承担Java迭代器知识的答案。 它不够精确,但对教育很有用。
编程时,我们经常编写如下所示的代码:
char[] grades = ....
for(int i = 0; i < grades.length; i++) { // for i goes from 0 to grades.length
System.out.print(grades[i]); // Print grades[i]
}
foreach语法允许使用更自然,语法更少的嘈杂方式来编写此常见模式。
for(char grade : grades) { // foreach grade in grades
System.out.print(grade); // print that grade
}
此外,此语法对于不支持数组索引的对象(例如列表或集合)有效,但它们实现Java Iterable接口。
链接地址: http://www.djcxy.com/p/52983.html