java - 使用迭代的 .hasNext(); 和 .next(); Java中的方法
问题描述
两天来,我对.hasNext();感到很困惑。和下一个();Iteration 接口的方法,尤其是在 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 并且代码继续下一行是简单的答案和正确的但我想清楚地理解它。
解决方案
实际上 iterator() 方法为您的(比方说)Arraylist 中的所有元素创建一个迭代器。现在在您的代码中,while 循环 x.hasNext() 的条件检查列表是否包含元素,如果是,则返回 true,否则返回 false。
现在 x.next() 指向您的 ArrayList 中的第一个元素(例如 LinkedLists)并存储该对象(在您的情况下为沃尔沃)。当您调用此方法时,它基本上为您提供 List 中该对象的引用,并且迭代器移动到List 中的下一个元素。调用 next() 方法时,迭代器(在您的情况下为 x)返回对象,然后移动到下一个元素(在您的情况下为梅赛德斯)。
现在,当您再次调用 next() 方法时,您会发现 Mercedes 已返回。要知道它是如何工作的,输入 System.out.println(x.next()) 三次而不是 while 循环,你会明白它移动到下一个位置。如果您第四次键入 System.out.println(x.next()) 它将给出异常,因为您的列表中没有更多元素。线程“main”中的异常 java.util.NoSuchElementException这是异常。
这就是为什么使用 hasNext() 方法来检查元素是否存在的原因。您可以将其与打印链表(如果您知道数据结构)进行比较,我们将一个对象指向头节点打印它并移动到下一个节点。相同的情况在这里它返回当前元素(对象)并移动到下一个元素(对象)。
推荐阅读
- sap-gui - SAP HANA Studio 更改 SAP GUI 分辨率
- google-colaboratory - 将秘密变量传递给 Google Colaboratory notebook
- javascript - req.body 在快递的 307 重定向上获得两次
- google-apps-script - 谷歌表格和谷歌分析认证
- java - 有什么方法可以将字符串 [这是某个类的对象] 转换为某个类的对象吗?
- angular - Angular 2+:将垫子分成两页
- cube - ESSBASE 运行时间长
- spring - Thymeleaf/Spring:如何检查消息属性是否存在
- http - Angular 5 - Http拦截器和行为主题问题
- c# - Aspx 表单不会将数据传递给文件后面的代码