【问题标题】:java - how can iterator.next() return the first element? [duplicate]java - iterator.next() 如何返回第一个元素? [复制]
【发布时间】:2019-02-02 14:59:26
【问题描述】:

我在 oracle 文档中阅读了 iterator.next() ,它说:iterator.next() 返回迭代中的下一个元素。我有这段代码,假设集合不为空:

while ( iterator.hasNext() ){
        Card nextCard = iterator.next();
        System.out.println( nextCard );
    }

在第一个循环中,调用hasNext(),有一个指针指向第一个元素,然后调用next()返回下一个元素,表示第二个元素,然后将指针移动到第二个元素,但是为什么我仍然可以打印出第一个元素?

【问题讨论】:

  • 指针从指向第一个元素开始,所以第一次调用next()会返回第一个元素,以此类推
  • 您仍然可以打印第一个元素,因为您的局部变量 nextCard 指向它。这与迭代器的位置无关。
  • next() 挑选并记住指针处的元素,然后前进指针,然后返回记住的元素。
  • 你想多了。 next() 返回序列中的下一个元素,从第一个元素开始。
  • 那么,当您还没有检索到 any 元素时,“下一个”元素是什么?这是第一个元素,是吗?

标签: java iterator


【解决方案1】:

文档说“hasNext() 如果集合有更多元素要迭代,则返回 true。”

hasNext() 不会将指针移动到下一个元素,它只是告诉您一个元素是否存在于下一次迭代中。 next() 依次返回下一个元素并移动指针。

【讨论】:

    【解决方案2】:

    访问 Java 文档以消除不确定性的良好做法。 这是 Iterator 的 JavaDoc -> hasNext 所说的

    boolean hasNext() 如果迭代有更多元素,则返回 true。 (换句话说,如果 next() 将返回一个元素而不是抛出一个元素,则返回 true 例外。) 回报: 如果迭代有更多元素,则为 true

    hasNext 只是查找元素是否存在于下一个索引位置并返回布尔值。指针会在next()上向前移动

    【讨论】:

      【解决方案3】:

      iterator.hasNext() 不会使指针向前,iterator.next() 会,所以在第一个循环中,iterator.next() 返回集合的第一个元素;它返回第二个循环中的第二个元素

      【讨论】:

        猜你喜欢
        • 2015-12-03
        • 2018-04-18
        • 2020-05-24
        • 1970-01-01
        • 1970-01-01
        • 2017-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多