我有以下代码显示ListIterator如何工作,但看起来迭代器返回的项目不是我所期望的。
import java.util.*;
public class IteratorExample {
public static void main(String args[]) {
ArrayList al = new ArrayList();
al.add("A");
al.add("B");
al.add("C");
ListIterator litr = al.listIterator();
System.out.print(litr.next()); // expect A
System.out.print(litr.next()); // expect B
System.out.print(litr.next()); // expect C
System.out.print(litr.previous()); // expect B
System.out.print(litr.previous()); // expect A
System.out.print(litr.next()); // expect B
System.out.print(litr.previous()); // expect A
}}
我希望看到“ABCBABA”,但示例程序给了我“ABCCBBB”。谁能解释迭代器是如何工作的?如果我想通过使用迭代器得到结果“ABCBABA”,我该怎么办?
答案 0 :(得分:2)
ListIterator没有最新信息 元件;它的光标位置总是位于元素之间 将通过调用previous()和将要返回的元素返回 通过调用next()返回。长度为n的列表的迭代器 具有n + 1个可能的光标位置,如插入符号(^)所示 下面:
Element(0) Element(1) Element(2) ... Element(n-1)
positions: ^ ^ ^ ^ ^
答案 1 :(得分:2)
这是了解此行为的另一种简单方法。
next() - >返回下一个元素并将光标前进一个元素,以便现在光标指向下一个元素的旁边。
previous() - >返回前一个元素并将光标向后移动一个元素,以便光标指向前一个元素。
在创建列表之后,迭代器位置如下所示:
{{1}}
所以输出正确“ABCCBBB”
答案 2 :(得分:1)
如果您阅读了listIterator.previous()方法的java doc,那么下面提到的内容可以回答您的问题:
“返回列表中的前一个元素。可以重复调用此方法以向后遍历列表,或者与来回调用混合使用。(请注意,交替调用next和previous will重复返回相同的元素。)“