是的,因为这不是您从外部代码中删除范围的方式。相反,请执行以下 *** 作:
list.subList(start, end).clear();
这实际上
removeRange是在幕后。†
OP询问为什么
removeRange不属于
List公共API。原因在《有效Java第二版》的第40条中进行了描述,在此引用:
有三种缩短简短参数列表的技术。一种是将方法分解为多种方法,每种方法仅需要一部分参数。如果不小心进行,可能会导致方法过多,但也可能通过增加正交性来帮助
减少
方法数量。例如,考虑java.util.List接口。它没有提供在子列表中查找元素的第一个索引或最后一个索引的方法,这两个方法都需要三个参数。而是提供了subList方法,该方法带有两个参数并返回子列表的
视图
。此方法可以与indexOf或lastIndexOf方法结合使用,以产生所需的功能,每个方法都具有一个参数。而且,subList方法可以与对实例进行 *** 作的
任何 方法组合以List对子列表执行任意计算。所得的API具有非常高的功率重量比。
可以说
removeRange没有那么多参数,因此可能不适合使用这种方法,但是鉴于有一种方法可以
removeRange通过调用
subList,因此没有理由
List用冗余方法来弄乱接口。
†该
AbstractList.removeRange文件说:
此方法由
clear对此列表及其子列表的 *** 作调用。重写此方法以利用列表实现的内部功能可以 大大 改善clear此列表及其子列表上 *** 作的性能。
另外,请参见OpenJDK的
AbstractList.clear和的实现
SubList.removeRange。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)