为什么java vector中的removerange(int fromindex,int toindex)受到保护?

wz8daaqr  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(231)

有人能解释一下为什么 removeRange(int fromIndex, int toIndex) 在java中向量是受保护的吗?
语法- protected synchronized void removeRange(int fromIndex, int toIndex) 我研究了一些博客,做了一些代码来理解,但事情在这里不是很清楚。我已经查看了vector.java的内部内容,并尝试创建一些理解。但我的总体看法是 removeRange(int fromIndex, int toIndex) 最终会被移除。
我觉得 sublist(int fromIndex, int toIndex).clear() 有能力做同样的工作。而且从实现和可用性的Angular 来看更合适。
如果你有更好的想法,请帮助理解。

u0njafvf

u0njafvf1#

它存在是因为它是继承的形式 AbstractList.removeRange . 在这个抽象基类中公开它的意图被记录为使子类能够改进 clear() :
此方法由此列表及其子列表上的清除操作调用。重写此方法以利用列表实现的内部结构可以显著提高此列表及其子列表上清除操作的性能。
删除此方法的可能性极小,因为这将是一个主要的兼容性问题。
但是作为这个类的用户,您应该坚持使用公共接口,受保护的方法对于实现子类非常有用。
那么,为什么这个方法不公开呢?
Java文档 List.subList 告诉我们
这种方法不需要显式的范围操作(数组中通常存在的类型)。通过传递子列表视图而不是整个列表,任何需要列表的操作都可以用作范围操作。例如,以下习惯用法从列表中删除一系列元素:

list.subList(from, to).clear();

因此,在公共界面中不包含范围操作是一个深思熟虑的设计选择。任何 List 实现时,可以通过调用子列表视图上的操作来执行这些操作。

相关问题