如何对上一次调用返回与上一次调用相同的元素?

时间:2016-03-14 03:20:24

标签: java list collections next

我在List界面上阅读Java Tutorial Oracle并遇到以下声明:

  

对下一个和上一个的调用可以混合,但你必须有点   小心。对previous的第一次调用返回与之相同的元素   最后一次打电话给下一个。

我很难理解这句话:对previous的第一次调用会返回与上次调用next相同的元素。有人可以更详细地解释一下吗?

4 个答案:

答案 0 :(得分:4)

  

对previous的第一次调用返回与上一次调用next相同的元素。有人可以更详细地解释一下吗?

如果您说.next()然后.previous(),则由于Iterator的内部位置,您会获得相同的实例。否则,对.next()的连续调用将返回相同的 实例

a b c
  ^

.next()提供b,但将指针移至c

a b c
    ^

所以.previous()然后产生b

答案 1 :(得分:3)

如果你改变你的心理模型,这很简单。 "光标" for nextprevious在元素之间停留。当您调用nextprevious时,它会移动一个元素并返回它传递的元素。

之前开始第一个元素。对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());