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)
来自Javadoc
(注意,交替调用
next和previous将重复返回相同的元素.)
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),并向后移动.