为什么Java的列表迭代器在改变方向时没有返回正确的元素

ung*_*rys 2 java arrays iterator list listiterator

我有以下代码:

LinkedList<String> list = new LinkedList<String>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
ListIterator<String> iterator = list.listIterator();
String str = iterator.next();
System.out.println(str);
str = iterator.next();
System.out.println(str);
str = iterator.next();
System.out.println(str);
System.out.println("switch direction");
str = iterator.previous();
System.out.println(str);
str = iterator.previous();
System.out.println(str);
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

1
2
3
switch direction
3
2
Run Code Online (Sandbox Code Playgroud)

我希望在第一次iterator.previous()调用时打印2,但不是.它给了我相同的元素,就像这个函数在第一次调用时什么都不做.

如果我从最后一次到第一次开始迭代,同样的事情发生,我将中间的方向改回到最后一次.

是否存在设计原因,或者它只是Java列表迭代器中的错误?

我在用:

java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
Run Code Online (Sandbox Code Playgroud)

Sot*_*lis 8

来自Javadoc

(注意,交替调用nextprevious将重复返回相同的元素.)

javadoc还描述了

长度为n的列表的迭代器具有n + 1个可能的光标位置,如下面的插入符号(^)所示:

                     Element(0)   Element(1)   Element(2)   ... Element(n-1)
cursor positions:  ^            ^            ^            ^                  ^
Run Code Online (Sandbox Code Playgroud)

如果光标在之前Element(0),并且您执行了操作next(),它将消耗Element(0)并向前移动.当你这样做时previous,它会再次消耗Element(0),并向后移动.

  • 同样来自Javadoc:ListIterator没有当前元素; 它的光标位置总是位于调用previous()返回的元素和调用next()返回的元素之间 (2认同)