我试图理解Java8中的Stream
,并间歇性地偶然发现了Java8的源代码中有趣的事情:ArrayList
似乎实现了两次:
显而易见的一个:java.util.ArrayList
不明显的一个:java.util.Arrays.ArrayList
,这是一个私人类。
一个奇怪的区别是正常版本更大,并实现List<E>
,而Arrays.ArrayList
不会(直接)。
为什么定义了两次?为什么同名?
答案 0 :(得分:5)
实际上它已经引入了Arrays.asList()
。 Array的ArrayList是底层数组的视图。如果Array被更改,ArrayList将受到影响,反之亦然。
主要好处是,不需要额外的空间,因为它不会将数组复制到新对象(ArrayList),也没有额外的时间来复制元素。