【发布时间】:2020-12-30 00:39:09
【问题描述】:
两天来,我对迭代接口的 .hasNext(); 和 next(); 方法感到非常困惑,尤其是在 while 循环中。举个例子吧:
import java.util.*; // imported whole java.util package.
class Main {
public static void main(String[] args) {
ArrayList<String> cars = new ArrayList<String>(); // created ArrayList which name is cars.
cars.add("Volvo");
cars.add("Mercedes");
cars.add("BMW");
Iterator<String> x = cars.iterator();
while(x.hasNext()) {
System.out.print(x.next() + " "); // It prints Volvo Mercedes BMW
}
}
}
我知道 .hasNext(); 是布尔值,如果迭代有元素,它会返回 true。 .next(); 方法返回下一个元素。在第一个元素沃尔沃之后,它返回 while(x.hasNext()) 并再次进入循环内部,但是这个循环的计数器在哪里?我的意思是在打印沃尔沃之后,它如何进入下一个元素?它返回所有元素,如果没有更多 .hasNext(); 返回 false 并且代码继续下一行是简单的答案和正确的但我想清楚地理解它。
【问题讨论】:
-
这能回答你的问题吗? How a java iterator works internally?
-
没有 @Turamarth ,我在问 while 循环在这个迭代中是如何工作的。因为没有计数器,但它的行为就像有一个计数器并返回下一个值。你分享的问题是关于迭代的,而不是我的问题。
-
迭代器实现本身是有状态的,并存储某种引用或计数器。每次调用
next()都会增加该计数器。当然,确切的方法是特定于实现的。 -
@ArvindKumarAvinash 感谢您提供信息,但我仍然尝试理解回复。我在问问题并得到答案。在我理解清楚之后,我绝对会检查正确和最容易理解的答案。
标签: java arraylist while-loop iteration