我使用内部类作为迭代器的文本书说,方法hasNext
只是返回current < this.size;
,其中current
是current index
。但是如果大小为3且索引为2,则不会是下一个值,那么为什么它不是< size - 1
答案 0 :(得分:1)
我不确定你指的是哪个Iterator实现,但是谈论java实现,如下所示:
public boolean hasNext() {
return cursor != size; //cursor is the index of next element to be fetched
}
所以你所指的实现我相信current
实际上是指接下来要提取的元素。
让我们举个例子:
Size : 3
current : 2
condition: 2<3(true) returns true and next() gets you the list.get(current)
Size:3
current :3
Condition : 3<3(fail) you don't have anymore element to iterate as you reached to the end.
答案 1 :(得分:1)
取决于您在next
方法中所做的事情。检查ArrayList.Itr实施中的代码。这是实现您描述的场景的一种方法(这类似于ArrayList.Itr实现),
current
最初指向0。next
时,current
的当前值会保存到变量,例如i
。 current
递增。i
的值。在上述情况下,如果current
值为3,则不再有元素。逻辑是正确的。迭代器的元素与current<size
一样长。
答案 2 :(得分:0)
可能是因为它尚未在索引current
处给出值。函数hasNext
只是告诉你是否还有一些东西要离开Iterator。例如,如果您想要打印迭代器的所有内容,您可以执行以下操作:
while (iterator.hasNext()) {
System.out.print(iterator.next());
}
将hasNext
和next
函数定义为:
public boolean hasNext() {
return current < this.size;
}
public T next() {
return this.array[current];
current++;
}