我可以在文档中看到:
java.util.AbstractList#removeRange
它需要二次时间:
此实现获取一个位于 fromIndex 之前的列表迭代器,并重复调用 ListIterator.next 后跟 ListIterator.remove,直到删除整个范围。注意:如果 ListIterator.remove 需要线性时间,则此实现需要二次时间。
但为什么??编码:
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();
}
}
对我来说似乎是线性的......但我必须是错的,因为我是这种算法的新手。请帮助我理解它。