为什么在 AbstractList 的迭代器的 remove() 方法中检查 if (lastRet < cursor)?

Why check if (lastRet < cursor) in AbstractList's iterator's remove() method?

我正在阅读 openjdk AbstractList 的迭代器部分。我无法弄清楚检查 if (lastRet < cursor) 的意义何在,这对我来说总是正确的。

这里lastRet是next()最后返回值的索引,cursor是next()要返回的值的索引。

代码如下:

public void remove() {
    if (lastRet < 0) {...} // throw exception
    checkForComodification();
    try {
        AbstractList.this.remove(lastRet);
        if (lastRet < cursor) // WHY??????????
            cursor--;
        lastRet = -1;
        expectedModCount = modCount;
    } catch (...) {
        ... // some exception
    }
 }

使用 Spotted 提供的 link 中的代码:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/AbstractList.java#AbstractList.Itr.remove%28%29

代码出现在嵌套的classItr中。还有另一个嵌套的 class ListItr 扩展了 ItrListItr增加了一些新方法,但没有覆盖remove(),也就是说remove()的代码在ItrListItr.[=27中是一样的=]

ListItr中,previous()方法将lastRetcursor设置为相同的东西。因此,调用 remove()lastRet < cursor 并不总是正确的。它似乎总是适用于常规 Itr,但不适用于 ListItr