Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么是Java';s列表迭代器在更改方向时未返回正确的元素_Java_Arrays_List_Iterator_Listiterator - Fatal编程技术网

为什么是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 "]
                ^