Java列表迭代器似乎没有正确地进行迭代
我正在写一个程序,它接受一个二叉树并按顺序遍历它。为了实现这一点,我的迭代器类遍历树并将元素添加到列表中,然后遍历列表。在调试我的代码时,我发现列表中包含了4个不同的元素,但在打印列表时,在Java列表迭代器似乎没有正确地进行迭代,java,list,iterator,listiterator,Java,List,Iterator,Listiterator,我正在写一个程序,它接受一个二叉树并按顺序遍历它。为了实现这一点,我的迭代器类遍历树并将元素添加到列表中,然后遍历列表。在调试我的代码时,我发现列表中包含了4个不同的元素,但在打印列表时,在main中,我在无限循环中反复得到tinsel(列表的第一个元素)。因此,迭代器根本不是在迭代;它在第一个元素上卡住了 迭代器类: import java.util.*; @SuppressWarnings("rawtypes") public class TreeIterator implements I
main
中,我在无限循环中反复得到tinsel
(列表的第一个元素)。因此,迭代器根本不是在迭代;它在第一个元素上卡住了
迭代器类:
import java.util.*;
@SuppressWarnings("rawtypes")
public class TreeIterator implements Iterator{
BinaryTree BT;
TreeIterator(BinaryTree BT){
this.BT=BT;
inOrder(BT.root);
}
private List<String> decorationList = new ArrayList<String>();
private void inOrder(Node root){
if(root==null) return;
inOrder(root.left);
String temp = root.decoration;
decorationList.add(temp);
inOrder(root.right);
}
public boolean hasNext() {
return decorationList.iterator().hasNext();
}
public Object next() {
return decorationList.iterator().next();
}
public void remove() {
// this method is not implemented
}
}
让我知道我是否也应该添加二叉树实现
public Object next() {
// vvvvvvvvvvv
return decorationList.iterator().next();
}
每次调用这些方法时,您都在创建一个新的迭代器。这就是为什么你看到了自己的行为。每次调用hasNext
或next
,都会创建一个从0开始的新迭代器
相反,如果编写的迭代器只是委托给另一个迭代器,则应在构造函数中一次性创建它:
class IteratorDelegator<T> implements Iterator<T> {
private final Iterator<? extends T> delegate;
IteratorDelegator(Iterable<? extends T> iterable) {
this.delegate = iterable.iterator();
}
@Override
public T next() {
return delegate.next();
}
...
}
类迭代器delegator实现迭代器{
私有最终迭代器此@SuppressWarnings(“rawtypes”)
是邪恶的。另外,为什么每次调用时都会再次获得迭代器?
class IteratorDelegator<T> implements Iterator<T> {
private final Iterator<? extends T> delegate;
IteratorDelegator(Iterable<? extends T> iterable) {
this.delegate = iterable.iterator();
}
@Override
public T next() {
return delegate.next();
}
...
}