SubList.clear() 如何仅从列表中删除子列表项"original"?



我已经阅读了ArrayList的src代码,我看到类SubList有一个成员thas is name:parentOffsetindexOffset。但我研究了从AbstractList继承的函数clear((,发现:

public void clear() {
removeRange(0, size());
}
protected void removeRange(int fromIndex, int toIndex) {
ListIterator<E> it = listIterator(fromIndex);
for (int i=0, n=toIndex-fromIndex; i<n; i++) {
it.next();
it.remove();
}
}

当涉及parentOffset时,我看不到任何地方,因此无法理解如何使用支持列表来清除";"父";列表

此外,我正在查看ListIterator的源代码,不明白为什么在运行列表时通过迭代器删除项时会引发异常?我试图阅读以下链接中的解释:modcount的角色但不幸的是,这对我没有帮助。

您看到的是包装器方法。

想象一下,我让你做一个蛋糕。你知道蛋糕需要一些面粉,所以…你让你的朋友去给你拿一些,然后你烤你的蛋糕。

你是这样问的人:";你他妈的是怎么做的蛋糕??我从没见过你买面粉&";。

clear()不做这项工作。Clear让它的朋友来做:它的朋友是removeRange

removeRange然后通过向ITS的朋友listIterator()问几个问题来完成这项工作。

it.remove()最终调用了listIterator(fromIndex)生成的listIterator上的remove方法。该代码完成了实际的繁重工作*。

*)或者它也会调用一个朋友。更普遍地说,没有一个方法可以完成所有的工作,因为removeRange确实完成了一些工作:它将"删除范围"的工作变成了"迭代范围"+"删除我们刚刚迭代的元素"的工作。

最新更新