gpt4 book ai didi

java - 为什么要在 AbstractList 迭代器的remove()方法中检查if(lastRet
转载 作者:行者123 更新时间:2023-11-30 07:33:08 26 4
gpt4 key购买 nike

我正在阅读 openjdk AbstractList 的迭代器部分。我不明白检查 if (lastRet

这里,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 提供的链接中的代码:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/AbstractList.java#AbstractList.Itr.remove%28%29

代码出现在嵌套类 Itr 中。还有另一个嵌套类 ListItr延伸ItrListItr添加了一些新方法,但不覆盖remove() ,这意味着 remove() 的代码与 Itr 相同和ListItr .

ListItrprevious()方法集lastRetcursor对同一件事。因此,lastRet < cursor 并不总是正确的。当remove()叫做。对于常规 Itr 来说似乎总是如此。 ,但不在 ListItr 中.

关于java - 为什么要在 AbstractList 迭代器的remove()方法中检查if(lastRet <cursor)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35789784/

26 4 0

Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com