java - linklist.iterator().next() 如何工作?

标签 java iterator

我试图了解迭代器在第一个元素的情况下如何工作。 就像我们第一次调用 iterator.next() 时为什么它返回 0 索引而不是 1 一样? 有一个类似的线程在某种程度上回答了这个问题,但它本身的代码似乎不匹配。 How does next() method on iterators work?

通过这段代码,实际上下一个方法似乎返回当前元素并将光标移动到下一个元素。

@SuppressWarnings("unchecked")
public E next() {
    checkForComodification();
    int i = cursor;
    if (i >= size)
        throw new NoSuchElementException();

    Object[] elementData = ArrayList.this.elementData;
    if (i >= elementData.length)
        throw new ConcurrentModificationException();

    cursor = i + 1;
    return (E) elementData[lastRet = i];
}

那么思考这个方法哪种方式是正确的呢? 我应该简单地忽略 java 文档,并将其视为返回当前并移至下一个吗?

最佳答案

As in when we call iterator.next() for the first time why does it return the 0 index and not the 1?

因为如果列表上的迭代器不允许您迭代底层列表的所有元素,那么列表上的迭代器将存在严重缺陷。

which way then is the correct to think about this method? should i simply ignore the java doc, and think of it as return current and move to next?

没有。你的心智模型与文档不一致,你应该首先考虑是否是你的模型需要调整。在这种情况下,您可能会得到这个更好的模型:

  • 对于任何迭代器,它都会迭代一个可能为空的项目序列。 next() 方法返回迭代器尚未返回的下一个。

  • 由于它适用于列表,因此将迭代器视为具有当前元素根本没有帮助。它有下一个元素(可能)和上一个元素(可能),但没有当前元素。您可以将其视为指向元素之间,或者第一个元素之前或最后一个元素之后。

关于java - linklist.iterator().next() 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54169078/

相关文章:

java - 在Java中插入排序的链表

c++ - C++ 中的迭代器和平均值

Java代码约定澄清——直接编码数值常量

java - 在存在另一个可聚焦组件的情况下,AWT Canvas 无法获得焦点

java - 在特定时间使用警报管理器

java.lang.IllegalArgumentException : Iteration variable cannot be null

java - 使用迭代器的 ArrayList 的不同值的 ArrayList

java - 将具有通用配置的 gradle 插件应用到所有项目

c++ - 映射/设置迭代器不是可取消引用的 C++ 映射

c++ - 子列表 C++ 的返回迭代器