Java 中的 ArrayList 没有从集合接口实现方法?



我目前对这个问题有点困惑。我注意到 ArrayList 是一个实现 List 的类,它反过来扩展了 Collection。

Collection<?>我们有一堆方法,一种可识别的方法就是containsAll().我查看了ArrayList的官方文档,但可以看到数组列表没有这样的方法。页面的页脚上写着"继承的方法",那里提到了containsAll()

我不明白的是(从文档中)即使 ArrayList 类中的主体为空或根本没有定义containsAll()?如果不是,这是某种违反Java规则的行为吗?

还有其他人以同样的方式"失踪"?!

containsAll()方法由AbstractCollection定义,由AbstractList扩展,而又由ArrayList扩展。因此,ArrayList继承了containsAll()实现。

请考虑以下代码:

List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
boolean contains = list.containsAll(Arrays.asList("b", "c"));

在这里,当调用list.containsAll()时,实际上是执行AbstractCollection中声明的方法。

ArrayList 扩展了 AbstractList,后者扩展了 AbstractCollection。

在那里你可以找到它:

如果此集合包含指定集合中的所有元素,则返回 true。

此实现循环访问指定的集合,依次检查迭代器返回的每个元素,以查看它是否包含在此集合中。如果所有元素都如此包含,则返回 true,否则返回 false。

基本上这里真正的答案是:注意 ArrayList 的 javadoc顶部,在那里你可以找到继承树:

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractList<E>
java.util.ArrayList<E>

最新更新