为什么Java的AbstractList的removeRange()方法受到保护?

为什么Java的AbstractList的removeRange()方法受到保护?,第1张

为什么Java的AbstractList的removeRange()方法受到保护?

是的,因为这不是您从外部代码中删除范围的方式。相反,请执行以下 *** 作:

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



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5475631.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存