【问题标题】:What is the difference between multiple implementations of ArrayList in the (Java8) source code [duplicate](Java8)源代码中ArrayList的多个实现有什么区别[重复]
【发布时间】:2014-03-29 18:50:56
【问题描述】:

我试图理解 Java8 中的 Streams 并且间歇性地在 Java8 的源代码中偶然发现了一个有趣的东西:ArrayList 似乎被实现了两次:

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

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

一个奇怪的区别是普通版本更大,并实现List<E>,而Arrays.ArrayList 没有(直接)这样做。

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

【问题讨论】:

  • 这在 Java 8 中并不新鲜 - 另请参阅:stackoverflow.com/questions/4792160/arrays-aslist-doubt/…
  • 这些类碰巧共享相同的名称,但不应该扮演相同的角色。 private 类是 Arrays 内部的一个实现细节,它提供了一个数组的 List 视图。它可能被称为ArrayViewList 或其他名称,也许它有助于理解假装它。

标签: java arraylist java-8


【解决方案1】:

实际上,自从Arrays.asList() 推出以来,它就在那里。 Array 的 ArrayList 是底层数组的视图。如果 Array 被更改,则 ArrayList 将生效,反之亦然。

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

【讨论】:

    猜你喜欢
    • 2015-05-30
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 2012-08-28
    • 2018-09-03
    • 2013-09-02
    • 1970-01-01
    相关资源
    最近更新 更多