关闭。这个问题是opinion-based .它目前不接受答案。
想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.
3年前关闭。
Improve this question
我的问题可能听起来很愚蠢,但请先阅读整个问题。
想了很久,为什么ArrayList
和其他实现 List、Set 等的类,不提供接受参数变量计数的简单构造函数?
List<Integer> list = new ArrayList<>(1, 2, 3);
这看起来简单而明显。 Java 9 新提供
List.of()
静态工厂方法,它只复制 Apache Utils 和 Guava 引入的相同内容。我们被迫使用冗长的解决方法。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); }};
...除非我们很乐意升级到 Java 9 或向上述 util 库之一添加依赖项或创建一个扩展类
ArrayList
并编写我们自己的构造函数。最后,我问的问题:是什么原因让设计师省略了这个构造函数?
你可以争辩说已经存在一个构造函数 ArrayList(int initialCapacity)它“构造一个具有指定初始容量的空列表”(同一页面的来源)-我知道这与我的想法相冲突,但老实说:我们必须提前多少次声明 ArrayList 的大小?我们不需要一个带有用于 ex 的预定义值的 ArrayList。单元测试数据?不足以初始化
new ArrayList<>()
其中调用 this(10)
默认情况下 99,9% 的情况?每个
List::add(..)
调用一个方法来确保数组的大小存储对于大量数据来说是昂贵的值,并且欢迎使用具有预定义大小的 ArrayList 构造函数 - 那么,为什么我们不使用数组呢?之后我们需要编辑大数组吗? - 使用调用 System.arraycopy
的 Arrays.asList(array) 将其添加到 ArrayList只是 once ,或者我们可以 ensureCapacity .这就是我在浏览 java.util 中的一些类后理解 ArrayList 当前设计的方式。请纠正我的理解错误或知识不足的地方。
是否有任何技术问题可以解释为什么构造函数
new ArrayList<>(1, 2, 3)
没有实现?
最佳答案
ArrayList
existed in Java 1.2.可变参数是引入的功能 in Java 1.5 (以及一大堆其他功能)。
从列表的可变参数初始化中真正需要的所有功能都可以在 Arrays.asList
中实现。 ,由于使用可变参数,它必须在 Java 1.5 前后或之后存在。
关于java - 为什么 ArrayList 没有可变参数构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49330475/