无限循环因为迭代器不移动

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()方法,但迭代器不会移动.

And*_*ner 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(); }
}
Run Code Online (Sandbox Code Playgroud)