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

ski*_*iwi 5 java arraylist java-8

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

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

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

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

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

RP-*_*RP- 5

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

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