在Java的内部类中实现hasNext方法

时间:2016-04-22 04:03:40

标签: java iterator

我使用内部类作为迭代器的文本书说,方法hasNext只是返回current < this.size;,其中currentcurrent index。但是如果大小为3且索引为2,则不会是下一个值,那么为什么它不是< size - 1

3 个答案:

答案 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的当前值会保存到变量,例如icurrent递增。
  • 返回索引i的值。

在上述情况下,如果current值为3,则不再有元素。逻辑是正确的。迭代器的元素与current<size一样长。

答案 2 :(得分:0)

可能是因为它尚未在索引current处给出值。函数hasNext只是告诉你是否还有一些东西要离开Iterator。例如,如果您想要打印迭代器的所有内容,您可以执行以下操作:

while (iterator.hasNext()) {
    System.out.print(iterator.next());
}

hasNextnext函数定义为:

public boolean hasNext() {
    return current < this.size;
}
public T next() {
    return this.array[current];
    current++;
}