sublist.clear()如何只从“原始”列表中删除子列表项?

vd8tlhqk  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(383)

我读过arraylist的src代码,我看到类子列表的成员是name:parentoffset和indexoffset。但我已经研究了从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时,我看不到任何地方,因此无法理解使用backed列表如何清除“parent”列表中的suit项?
此外,我正在检查listiterator的源代码,不明白为什么在运行列表时通过iterator删除项目时会引发异常?我试着读下面的解释link:role of 但不幸的是这对我没有帮助。

ev7lccsx

ev7lccsx1#

您看到的是 Package 器方法。
想象一下我让你做蛋糕。你知道蛋糕需要一些面粉,所以。。。你让你的朋友去给你拿一些,然后你烤蛋糕。
你在问:“你是怎么做蛋糕的?”??我从没见过你买面粉。 clear() 不做这项工作。明确要求它的朋友去做:它的朋友是 removeRange .
然后,removerange通过向它的朋友问几个问题来完成这项工作 listIterator() . it.remove() 最后在该listiterator上调用remove方法 listIterator(fromIndex) 制造。该代码执行实际的繁重操作*。

  • )或者它也会召唤一个朋友。更一般地说,没有一个方法可以做到这一切,因为removerange确实做了一些工作:它将“delete a range”的作业变成了“iterate over a range”+“remove the element we just iterated over”的作业。

相关问题