(Java8)源代码中ArrayList的多个实现之间有什么区别
我试图理解Java8中的(Java8)源代码中ArrayList的多个实现之间有什么区别,java,arraylist,java-8,Java,Arraylist,Java 8,我试图理解Java8中的Streams,偶尔我在Java8的源代码中偶然发现了一件有趣的事情:ArrayList似乎实现了两次: 显而易见的一个:java.util.ArrayList 不明显的一个:java.util.Arrays.ArrayList,它是一个私有类 一个奇怪的区别是,普通版本要大得多,并且实现了List,而Arrays.ArrayList不直接实现 为什么要定义两次?为什么使用相同的名称呢?实际上,自从Arrays.asList()引入以来,它就一直存在。数组的Array
Stream
s,偶尔我在Java8的源代码中偶然发现了一件有趣的事情:ArrayList
似乎实现了两次:
- 显而易见的一个:
java.util.ArrayList
- 不明显的一个:
,它是一个私有类java.util.Arrays.ArrayList
List
,而Arrays.ArrayList
不直接实现
为什么要定义两次?为什么使用相同的名称呢?实际上,自从
Arrays.asList()
引入以来,它就一直存在。数组的ArrayList是底层数组的视图。如果数组被更改,ArrayList将生效,反之亦然
主要的好处是,不需要额外的空间,因为它不会将数组复制到新对象(ArrayList),也不需要额外的时间来复制元素。这在Java 8中并不新鲜-另请参见:这些类恰好共享相同的名称,但不应该履行相同的角色。
private
类是Arrays
中的一个实现细节,它提供了数组的列表
视图。它可以被称为ArrayViewList
或其他什么,也许假装它是有助于理解。