【发布时间】:2013-02-28 04:45:49
【问题描述】:
我有一个大学作业,要求我实现一个实现迭代器接口的内部类。迭代器适用于单链表超类。
目前我的内部类是这样的:
private class ListIterator implements Iterator<V>{
Node temp;
boolean nextCalled = false;
ListIterator(Node fo){
this.temp = fo;
}
@Override
public boolean hasNext() {
if(temp != null){
return true;
}
return false;
}
@Override
public V next() {
nextCalled = true;
return temp.getReprValue();
}
@Override
public void remove() {
if(nextCalled && hasNext()){
nextCalled = false;
removeElement(temp.getReprKey());
temp = temp.getNext();
}
}
}
现在我的问题是,即使列表实际上是空的,hasNext() 方法也会返回 true。其他一切似乎都有效。我可能在某个地方忽略了一个逻辑缺陷,但我自己找不到。
【问题讨论】:
-
next方法不仅应该返回值,而且应该以某种方式将迭代器移动到下一个位置。您的实现只存储一个标志。 -
不应该在
next()方法中更改temp的值吗? -
附带说明,在与 Iterator 相同的包中已经有一个名为
ListIterator的接口...因此您可能需要选择不同的名称。
标签: java iterator linked-list iterable