luc*_*ike 1 java iterator loops
有一些实现接口的类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(); }
}
Run Code Online (Sandbox Code Playgroud)
items是一个ArrayList.obj是一个值,以便在第一次next()使用之前保存第一个序列成员.
使用以下代码,程序进入无限循环,其中仅打印序列的第一个成员.
while(!selector.end()) {
System.out.print(selector.current() + " ");
selector.next();
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?虽然我使用next()方法,但迭代器不会移动.
每次调用时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(); }
}
Run Code Online (Sandbox Code Playgroud)