<分区>
我试图理解 Stream
s 在 Java8 中断断续续地在 Java8 的源代码中偶然发现了一件有趣的事情:ArrayList
似乎执行了两次:
最明显的一个:
java.util.ArrayList
不明显的:
java.util.Arrays.ArrayList
,这是一个私有(private)类。
一个奇怪的区别是普通版本更大,并且实现了List<E>
,而 Arrays.ArrayList
不这样做(直接)。
为什么定义了两次?为什么使用相同的名称?
<分区>
我试图理解 Stream
s 在 Java8 中断断续续地在 Java8 的源代码中偶然发现了一件有趣的事情:ArrayList
似乎执行了两次:
最明显的一个:java.util.ArrayList
不明显的:java.util.Arrays.ArrayList
,这是一个私有(private)类。
一个奇怪的区别是普通版本更大,并且实现了List<E>
,而 Arrays.ArrayList
不这样做(直接)。
为什么定义了两次?为什么使用相同的名称?
最佳答案
实际上,自 Arrays.asList()
引入以来,它就一直存在。 Array 的 ArrayList 是底层数组的 View 。如果 Array 被更改,ArrayList 将受到影响,反之亦然。
主要好处,不需要额外的空间,因为它不会将数组复制到新对象 (ArrayList),也不需要额外的时间来复制元素。
关于java - (Java8)源码中ArrayList的多个实现有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22049931/
相关文章:
concurrency - ConcurrentHashMap,JDK8 中改进的并发特性
java - 使用 httpurlconnection multipart/form-data 上传数组列表
java - session 中的 ArraryList 附件
java - 使用 PDFBox 2.0.12 进行外部签名
java - 尝试对 String ArrayList 进行排序时,排序方法不起作用
java - 为什么并行 ForkJoinPool 加倍我的异常?
java - 如何提取与 CoreEntityMention 匹配的维基百科实体 (WikiDictAnnotator)