第一次调用 previous returns 如何与最后一次调用 next 相同的元素?

How does the first call to previous returns the same element as the last call to next?

我正在阅读 Java Tutorial Oracle 列表界面,遇到以下语句:

Calls to next and previous can be intermixed, but you have to be a bit careful. The first call to previous returns the same element as the last call to next.

我正在努力理解这个短语:对上一个 returns 的第一次调用与对下一个的最后一次调用相同的元素。有人可以更详细地解释一下吗?

The first call to previous returns the same element as the last call to next. Could someone explain it in a bit more detail?

如果你说 .next() 然后 .previous(),你会得到相同的实例,因为 Iterator 的内部位置。否则,对 .next() 的连续调用将 return same instance.

a b c
  ^

.next() 给出 b,但将指针移动到 c

a b c
    ^

所以 .previous() 然后产生 b.

如果你改变你的思维模式,这很简单。 nextprevious 的 "cursor" 位于 between 元素之间。当您调用 nextprevious 时,它移动一个元素并 return 移动它传递的元素。

它开始于第一个元素之前。调用 next return 是它经过的元素(第一个),光标停在第一个和第二个元素(元素 0 和 1)之间。

此时调用 next return 是第二个元素并将光标留在第二个和第三个元素之间。相反,如果您调用 previous,光标将返回第一个元素并 return 它,再次停在第一个元素之前。

list.previous return 移动列表中的前一个元素并移动光标位置 backwards.Note 交替调用 next 和 previous 将重复 return 相同的元素。

ListIterator<Object> iterator = (ListIterator<Object>) myList.iterator();
        while (iterator.hasNext()) {
            Object o = iterator.next();
            Object secondObject = iterator.previous();
            o == secondObject; // ALways
        }

希望这个例子能解开你的疑惑

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());