我试图了解迭代器在第一个元素的情况下如何工作。 就像我们第一次调用 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/