有一个实现接口Selector
的类。我应该在其方法中使用iterator()
。
private class SequenceSelector implements Selector {
private T obj = items.iterator().next();
public boolean end() { return !items.iterator().hasNext(); }
public T current() { return obj; }
public void next() { obj = items.iterator().next(); }
}
items
是一个ArrayList。 obj
是一个值,用于在第一个next()
使用之前保存第一个序列成员。
使用以下代码,程序进入无限循环,其中仅打印序列的第一个成员。
while(!selector.end()) {
System.out.print(selector.current() + " ");
selector.next();
}
为什么会这样?虽然我使用next()
方法,但迭代器不会移动。
答案 0 :(得分:6)
每次调用items.iterator()
时,都会创建一个新的迭代器。
在开始时创建一个迭代器,并重复使用它。
private class SequenceSelector implements Selector {
private final Iterator<T> iterator = items.iterator();
private T obj = iterator.next();
public boolean end() { return !iterator.hasNext(); }
public T current() { return obj; }
public void next() { obj = iterator.next(); }
}