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

时间:2016-07-21 15:14:40

标签: java loops iterator

有一个实现接口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()方法,但迭代器不会移动。

1 个答案:

答案 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(); }
}