为什么是Java';s列表迭代器在更改方向时未返回正确的元素
我有以下代码:为什么是Java';s列表迭代器在更改方向时未返回正确的元素,java,arrays,list,iterator,listiterator,Java,Arrays,List,Iterator,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();
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);
我希望在第一个迭代器.previous()调用中打印2,但不是。它给了我同样的元素,就像这个函数在第一次调用时什么都不做一样
同样的事情,如果我开始从最后一个到第一个迭代,我在中间改变方向回到最后。
这是设计原因吗,还是仅仅是Java列表迭代器中的一个bug
我正在使用:
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)
从
(请注意,交替调用next
和previous
将返回相同的结果。)
元素重复。)
javadoc还描述了
长度为n的列表的迭代器有n+1个可能的光标位置,
如以下插入符号(^)所示:
如果光标位于
元素(0)
之前,并且您执行下一步()
,它将消耗元素(0)
并向前移动。当您执行上一个时,它将再次消耗元素(0)
,并向后移动。根据
返回列表中的上一个元素并向后移动光标位置。可以重复调用此方法以向后遍历列表,也可以混合调用next()以来回遍历。(请注意,交替调用next和previous将重复返回相同的元素。)
您可以将迭代器的当前位置想象为在下一个要返回的项之前,以及在上一个要返回的项之后
第一次打印上一个next
之后、第一个previous
之前、3
之后的可视化:
[ "1" ] [ "2" ] [ "3" ] [ "4 "]
^
当第二次打印3
时,第一次之前的之后的可视化:
[ "1" ] [ "2" ] [ "3" ] [ "4 "]
^
(这是ListIterator
javadocs描述当前位置的方式。)同样来自Javadoc:ListIterator没有当前元素;其光标位置始终位于调用previous()返回的元素和调用next()返回的元素之间
[ "1" ] [ "2" ] [ "3" ] [ "4 "]
^
[ "1" ] [ "2" ] [ "3" ] [ "4 "]
^