首页 > 解决方案 > 为什么我不能在迭代时添加到 ListIterator?

问题描述

我试图在迭代它时添加到 ListIterator 但在检查它是否工作时 hasNext() 总是返回 false。

正如javadoc所说,ListIterator 是“列表的迭代器,它允许程序员在任一方向遍历列表,在迭代期间修改列表,并获取迭代器在列表中的当前位置。” 但是,当我尝试添加时,我既没有收到错误消息,也没有 ListIterator 获得新元素。

public void foo() {
    List<String> bar = new ArrayList<String>();
    bar.add("foobar");
    ListIterator<String> quux = bar.listIterator();
    while(quux.hasNext()) {
        if(quux.next().equals("foobar")) {
            quux.add("baz");
        }
    }
}

在这个函数结束时,我希望 ListIterator 包含新的字符串“baz”。但是,当我调用 hasNext() 方法时,它返回 false。该程序甚至通过了 if 语句,结果表明 add-method 没有做它应该做的事情。

标签: javaloopsiterator

解决方案


您似乎希望能够使用以下命令获取添加的元素next()

ListIterator 也没有获得新元素

[...]

在这个函数结束时,我希望 ListIterator 包含新的字符串“baz”。但是,当我调用 hasNext() 方法时,它返回 false

但是, ListIterator.add()的 JavaDoc明确指出情况并非如此:

新元素插入到隐式游标之前:对 next 的后续调用将不受影响


如果要在迭代中包含元素,可以将列表迭代器倒回一个位置:

    if(quux.next().equals("foobar")) {
        quux.add("baz");
        quux.previous();
    }

推荐阅读