Java 为什么ArrayList没有varargs构造函数?

Java 为什么ArrayList没有varargs构造函数?,java,arrays,arraylist,collections,constructor,Java,Arrays,Arraylist,Collections,Constructor,我的问题可能听起来很傻,但请先把整个问题读一遍 我想知道很长一段时间,为什么ArrayList和其他实现List、Set等的类不提供一个接受参数变量计数的简单构造函数 List<Integer> list = new ArrayList<>(1, 2, 3); …除非我们愿意升级到Java 9,或者向上面的某个util库添加依赖项,或者创建一个扩展ArrayList并编写我们自己的构造函数的类 最后,我要问的问题是:是什么原因让设计师忽略了这个构造函数? 你可以说已经

我的问题可能听起来很傻,但请先把整个问题读一遍

我想知道很长一段时间,为什么
ArrayList
和其他实现List、Set等的类不提供一个接受参数变量计数的简单构造函数

List<Integer> list = new ArrayList<>(1, 2, 3);
…除非我们愿意升级到Java 9,或者向上面的某个util库添加依赖项,或者创建一个扩展
ArrayList
并编写我们自己的构造函数的类


最后,我要问的问题是:是什么原因让设计师忽略了这个构造函数?

你可以说已经存在一个构造函数,它“构造一个具有指定初始容量的空列表”(来源于同一页)-我知道这与我的想法相冲突,但老实说:我们需要预先声明ArrayList的大小多少次?我们不需要一个带有预定义值的ArrayList,用于ex.unit tests数据吗?初始化
new ArrayList()
还不够吗?默认情况下,99.9%的情况下,哪个调用
this(10)

每个
List::add(…)
调用一个方法,该方法可以确保存储大量数据的值的数组的大小,并且欢迎使用预定义大小的ArrayList构造函数-那么,我们为什么不使用数组呢?之后是否需要编辑大数组?-使用Arrays.asList(array)将其添加到ArrayList,该数组调用
System.arraycopy
just,或者我们也可以

在浏览了java.util中的一些类之后,我就是这样理解ArrayList的当前设计的。请纠正我的理解错误或知识不足的地方

有没有任何技术问题可以解释为什么构造函数
新的ArrayList(1,2,3)
没有实现?引入了Varargs功能(以及一堆其他功能)


列表的vararg初始化所需的所有功能都可以在中实现,由于使用varargs,它必须在Java 1.5前后存在。

我不明白初始容量参数为什么会与varargs初始值设定项冲突。shmosel:new ArrayList(1),其中1是int-它是列表的大小还是第一个元素?我明白你的意思。@Makoto我不认为是。@Makoto我甚至不知道。Java怎么知道呢?Arrays.asList早于varargs,但参数的类型为Object[]。
List<Integer> list = Arrays.asList(1, 2, 3);
List<Integer> list = Stream.of(1, 2, 3).collect(Collectors.toList());
List<Integer> list = new ArrayList<Integer>() {{ add(1); add(2); add(3); }};