迭代器实现导致无限循环

时间:2015-11-10 10:17:15

标签: java

我正在尝试按照我构建的链表列表类的方式执行foreach循环:

boolean contains = false;
for(Thing t : front) {
    if(t.equals(something)) {
        t.doSomething();
        contains = true;
        break;
    } 
}

这是我实现的迭代器方法:

@Override
public Iterator<Thing> iterator() {
    Thing current = this;
    return new Iterator<Thing>() {
        public boolean hasNext() {
            return current.hasNext();
        }

        public Thing next() {
            return current.next;
        }
    };
}

我已经尝试过调试它,它似乎没有返回链表中的下一个元素,因此当我运行它并尝试执行foreach循环时会导致无限循环。

很抱歉,如果这个问题已经得到解答或者有一个非常愚蠢的错误,我搜索了一段时间后找不到答案。这是我第一次编写迭代器,所以请保持温和。 :)

1 个答案:

答案 0 :(得分:6)

您必须在Iterator中推进next()的状态:

    public Thing next() {
        current = current.next;
        return current;
    }

否则,对next()的所有调用都将返回相同的元素。

编辑:

您应该在匿名类实例中移动局部变量声明Thing current = this;(即将其转换为实例变量)。

@Override
public Iterator<Thing> iterator() {
    return new Iterator<Thing>() {

        private Thing current = Thing.this;

        public boolean hasNext() {
            return current.hasNext();
        }

        public Thing next() {
            current = current.next;
            return current;
        }

    };
}
相关问题