为了账号安全,请及时绑定邮箱和手机立即绑定

每个'循环的Java'如何工作?

每个'循环的Java'如何工作?

慕娘9325324 2019-05-23 13:00:14
每个'循环的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语言规范


查看完整回答
反对 回复 2019-05-23
?
德玛西亚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中。因此,即使您自己的类型也可以使用此语法。


查看完整回答
反对 回复 2019-05-23
  • 3 回答
  • 0 关注
  • 393 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信