为什么Java向量中的removeRange(int-fromIndex,int-toIndex)受到保护?
有人能解释一下为什么Java Vector中的为什么Java向量中的removeRange(int-fromIndex,int-toIndex)受到保护?,java,collections,java-13,Java,Collections,Java 13,有人能解释一下为什么Java Vector中的removeRange(int-fromIndex,int-toIndex)受到保护吗 语法- protected synchronized void removeRange(int-fromfindex,int-to-index) 我研究了一些博客,编写了一些代码来理解,但这里的情况并不十分清楚。我已经了解了Vector.java,并试图创建一些理解。但我的总体看法是,removeRange(int-fromIndex,int-toIndex)最终
removeRange(int-fromIndex,int-toIndex)
受到保护吗
语法-
protected synchronized void removeRange(int-fromfindex,int-to-index)
我研究了一些博客,编写了一些代码来理解,但这里的情况并不十分清楚。我已经了解了Vector.java,并试图创建一些理解。但我的总体看法是,
removeRange(int-fromIndex,int-toIndex)
最终会被删除
我觉得子列表(int-fromIndex,int-toIndex)。clear()
也可以做同样的工作。从实现和可用性的角度来看,它看起来更合适
如果您有更好的想法,请帮助理解。它之所以存在,是因为它是继承的形式。在这个抽象基类中公开它的意图被记录为使子类能够提高
clear()
的性能:
此方法由此列表及其子列表上的清除操作调用。重写此方法以利用列表实现的内部功能,可以显著提高此列表及其子列表上清除操作的性能
这种方法不太可能被删除,因为这将是一个主要的兼容性问题
但是您是对的,作为这个类的用户,您应该坚持使用公共接口,受保护的方法对于实现子类非常有用
那么,为什么不公开这种方法呢 JavaDocs告诉我们 此方法消除了显式范围操作的需要(通常存在于数组中)。通过传递子列表视图而不是整个列表,任何需要列表的操作都可以用作范围操作。例如,以下习惯用法从列表中删除一系列元素:
list.subList(from, to).clear();
因此,在公共界面中不包含范围操作是一种深思熟虑的设计选择。在任何
列表
实现中,这些操作都可以通过调用子列表视图上的操作来执行。“但我的总体感觉是删除范围(int-fromIndex,int-toIndex)
最终会被删除。”你怎么认为会这样呢?那么,为什么您首先希望它是公共的
?也许根本就不要使用java.util.Vector
。这通常不是最好的选择。永远不要使用向量!使用ArrayList
而不是“当然,子列表(int-fromIndex,int-to-Index).clear()
能够完成相同的工作”。它能够做到这一点,因为有人已经实现了它。对于Vector
或AbstractList
的任何其他子类,例如ArrayList
,它已通过该受保护的方法实现。这比要求每个子类再次实现子列表更简单。@Aksha声明它受保护可以实现使用标准API,即子列表(从索引到索引)。clear()
,我看到AbstractList.removeRange
被保护,所以当Vector类重写它时,它也可以被公开。但相反,它被保存为受保护的。您提到的提高clear()
性能的要点,我在AbstractList
中也读过。我注意到Vector有自己的clear()
调用removalelements()
。@Holger,很抱歉我重复了我的评论。@Hulk我喜欢这种推理。而removeRange(int-fromIndex,int-to-Index)
不属于LinkedList,可能是有原因的。我从来没有想过。@Hulk-所以这是“设计的”,我以前听说过;)@绿巨人和霍尔格,谢谢你们的时间和指导。非常感谢:)