Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java向量中的removeRange(int-fromIndex,int-toIndex)受到保护?_Java_Collections_Java 13 - Fatal编程技术网

为什么Java向量中的removeRange(int-fromIndex,int-toIndex)受到保护?

为什么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)最终

有人能解释一下为什么Java Vector中的
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-所以这是“设计的”,我以前听说过;)@绿巨人和霍尔格,谢谢你们的时间和指导。非常感谢:)