每个'循环的Java'如何工作?考虑:List<String> someList = new ArrayList<String>();// add "monkey", "donkey", "skeleton key" to someListfor (String item : someList) {
System.out.println(item);}如果for不使用for each语法,等效循环会是什么样子?
3 回答
holdtom
TA贡献1805条经验 获得超10个赞
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索引计数器并array.length
反而进行检查。请参阅Java语言规范。
德玛西亚99
TA贡献1770条经验 获得超3个赞
每个的构造对数组也有效。例如
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(:)习语,因为实际的迭代器只是推断。
这是nsayer的回答所暗示的,但值得注意的是,当“someList”是实现java.lang.Iterable的任何东西时,OP的for(..)语法将起作用 - 它不必是列表,也不一定是来自java.util中。因此,即使您自己的类型也可以使用此语法。
添加回答
举报
0/150
提交
取消