我必須讓自己成爲一個自定義鏈表,並且Iterator有問題。 next()
方法正常工作,但奇怪的是,方法沒有。
下面是代碼:自制迭代器錯誤
public Iterator<T> iterator() {
final Node<T> currentNode = this.iteratorNode;
final MyLinkedList<T> list = this;
final Node<T> firstNode = this.firstNode;
return new Iterator<T>() {
@Override
public boolean hasNext() {
if (list.isEmpty()) {
return false;
} else if (currentNode == null){
list.setIteratorNode(firstNode);
return true;
} else if (currentNode.nextNode == null){
return false;
}
list.setIteratorNode(currentNode.nextNode);
return true;
}
@Override
public T next() {
if (list.isEmpty()){
return null;
} else if (currentNode == null){
list.setIteratorNode(firstNode);
return firstNode.data;
} else if (currentNode.nextNode == null) {
return null;
}
list.setIteratorNode(currentNode.nextNode);
return currentNode.nextNode.data;
}
};
}
是否正常工作的代碼(如isEmpty()
和setIteratorNode()
方法的組成部分真正使這個奇怪的(在我看來),就是我基本上做同樣的事情在next()
在hasNext()
。
任何幫助,將不勝感激。
「不能正常工作」是什麼意思? – Yann 2014-10-16 12:22:37
在'hasNext'中設置一些東西是非常糟糕的主意 - 人們期望'hasNext'只會提供一些信息,而不會改變內部狀態。 – 2014-10-16 12:24:34
這意味着當迭代通過一個超過1個元素的列表時,它總是返回true。道歉,我會編輯這個問題。 – 2014-10-16 12:25:34