(Java8)源代码中ArrayList的多个实现之间有什么区别

时间:2014-02-26 18:22:39

标签: java arraylist java-8

我试图理解Java8中的Stream,并间歇性地偶然发现了Java8的源代码中有趣的事情:ArrayList似乎实现了两次:

  • 显而易见的一个:java.util.ArrayList

  • 不明显的一个:java.util.Arrays.ArrayList,这是一个私人类。

一个奇怪的区别是正常版本更大,并实现List<E>,而Arrays.ArrayList不会(直接)。

为什么定义了两次?为什么同名?

1 个答案:

答案 0 :(得分:5)

实际上它已经引入了Arrays.asList()。 Array的ArrayList是底层数组的视图。如果Array被更改,ArrayList将受到影响,反之亦然。

主要好处是,不需要额外的空间,因为它不会将数组复制到新对象(ArrayList),也没有额外的时间来复制元素。