我在List界面上阅读Java Tutorial Oracle并遇到以下声明:
对下一个和上一个的调用可以混合,但你必须有点 小心。对previous的第一次调用返回与之相同的元素 最后一次打电话给下一个。
我很难理解这句话:对previous的第一次调用会返回与上次调用next相同的元素。有人可以更详细地解释一下吗?
答案 0 :(得分:4)
对previous的第一次调用返回与上一次调用next相同的元素。有人可以更详细地解释一下吗?
如果您说.next()
然后.previous()
,则由于Iterator
的内部位置,您会获得相同的实例。否则,对.next()
的连续调用将返回相同的 实例。
a b c
^
.next()
提供b
,但将指针移至c
a b c
^
所以.previous()
然后产生b
。
答案 1 :(得分:3)
如果你改变你的心理模型,这很简单。 "光标" for next
和previous
在元素之间停留。当您调用next
或previous
时,它会移动一个元素并返回它传递的元素。
在之前开始第一个元素。对next
的调用返回它传递的元素(第一个),光标在第一个和第二个元素(元素0和1)之间停止。
此时调用next
将返回第二个元素,并将光标留在第二个和第三个元素之间。如果您调用了previous
,则光标将在第一个元素上备份并返回,然后再次在第一个元素之前休息。
答案 2 :(得分:1)
>
返回列表中的前一个元素并向后移动光标位置。请注意,对next和previous的交替调用将重复返回相同的元素。
list.previous
答案 3 :(得分:1)
希望这个例子能够清除你的怀疑
List<Integer> colls = Arrays.asList(new Integer[]{1,2,3,4,5,6,7,8,9,10});
ListIterator<Integer> iterator = colls.listIterator();
iterator.next();
System.out.println("Last Call to next " + iterator.next());
System.out.println("First Call to previous " + iterator.previous());