【问题标题】:Is there any good reason why ArrayList does not take Array as a constructor argument?ArrayList 不将 Array 作为构造函数参数有什么好的理由吗?
【发布时间】:2014-11-07 00:46:44
【问题描述】:

在我看来,给 ArrayList 一个以数组作为参数并创建一个与传递的数组等效的 ArrayList 的构造函数是非常合乎逻辑的。

但是目前我们没有这样的构造函数。相反,我们必须使用 Arrays.asList API 将数组转换为 ArrayList。

为什么 Array 到 ArrayList 的转换被分离到 Arrays API 中?这个设计决策是否有更深入的思考?

【问题讨论】:

  • 因为他们没有把它放进去。除非你得到一个作者的回答,这不太可能,你也不会得到一个权威的答案。
  • 非权威答案(实际上,完全猜测):因为 ArrayList 最初不是通用的?我认为在原始的前通用集合中实现这一点是不可行的。这并不能解释为什么他们后来没有添加它,只是“只是没想到”。
  • 有趣的是 Arrays.asList(T... a) 实际上并没有返回 java.util.ArrayList 它返回自己的类,也称为 ArrayList (java.util.Arrays$ArrayList)。但如果我猜测他们为什么不让ArrayList 类接受一个数组,是因为它可能会导致在构造函数中传递的数组的可变状态引起混淆。
  • 我绝对同意这一点:不清楚是抄袭还是什么。
  • 这个问题在here之前已经问过了,但可能没有你想要的答案。

标签: java collections


【解决方案1】:

数组是对象,它们的长度被声明为最终的。 List接口的Arraylist resizable-array实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多