为什么JavaVector中的removeRange(intfromIndex,inttoIndex)受到保护?

任何人都可以解释为什么removeRange(int fromIndex, int toIndex)在 Java Vector 中受到保护?

句法 -
protected synchronized void removeRange(int fromIndex, int toIndex)

我研究了一些博客并做了一些代码来理解,但这里的事情并不是很清楚。我已经查看了 Vector.java 并尝试创建一些理解。但我的总体看法是removeRange(int fromIndex, int toIndex)最终会被删除。

我觉得sublist(int fromIndex, int toIndex).clear()有能力做同样的工作。从实现和可用性的角度来看,看起来更合适。

如果您有更好的想法,请帮助理解。

回答

它存在是因为它是继承形式AbstractList.removeRange。在这个抽象基类中公开它的意图被记录为使子类能够提高以下性能clear()

此方法由对此列表及其子列表的清除操作调用。重写此方法以利用列表实现的内部结构可以显着提高此列表及其子列表上清除操作的性能。

这种方法极不可能被删除,因为这将是一个主要的兼容性问题。

但是您是对的,作为此类的用户,您应该坚持使用公共接口,受保护的方法主要用于实现子类。


那么,为什么不公开该方法呢?

List.subList告诉我们的 JavaDocs

此方法消除了对显式范围操作(数组通常存在的排序)的需要。通过传递子列表视图而不是整个列表,任何需要列表的操作都可以用作范围操作。例如,以下习语从列表中删除一系列元素:

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

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


以上是为什么JavaVector中的removeRange(intfromIndex,inttoIndex)受到保护?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>