首页 > 解决方案 > 使用迭代的 .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 并且代码继续下一行是简单的答案和正确的但我想清楚地理解它。

标签: javaarraylistwhile-loopiteration

解决方案


实际上 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() 方法来检查元素是否存在的原因。您可以将其与打印链表(如果您知道数据结构)进行比较,我们将一个对象指向头节点打印它并移动到下一个节点。相同的情况在这里它返回当前元素(对象)并移动到下一个元素(对象)。


推荐阅读