-6

我有以下代码:

    ArrayList<String> words;
    words = new ArrayList<String>();
    words.add("is");
    words.add("us");
    ListIterator<String> it;
    it = words.listIterator();
    it.add("##");
    System.out.println(words);
    it.next();
    it.next();
    it.previous();
    it.set("##");
    System.out.println(words);

我希望输出是## us ##,但是当我运行程序时它会返回## is ##。我希望这与向其ListIterator添加项目ArrayList而不是ArrayList向其自身添加项目有关。

为什么程序会以这种方式运行?

4

1 回答 1

8

您的问题不清楚,但我怀疑您可能缺少的要点是ListIterator.add在当前位置插入:

该元素被插入到 next() 将返回的下一个元素(如果有)之前,并且插入到 next() 将返回的下一个元素(如果有)之后。

并且:

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

因此,在您对列表的初始调用后it.add("##"),包含"##", "is" "us"。然后您接下来移动两次 - 第一次将光标移动到紧随其后"is"(返回)。第二个将光标移动到紧随其后"us"(返回)。然后调用再次previous()返回"us",最后调用set()替换"us""##"

将 next() 或 previous() 返回的最后一个元素替换为指定元素(可选操作)。

看起来它完全遵守了文档。不幸的是,不清楚这些步骤中的哪一个让您感到困惑,因为您在一个问题中混淆了这么多。

于 2012-12-19T16:29:09.660 回答