Nik*_*las 4 java arrays collections constructor arraylist
我的问题可能听起来很愚蠢,但请先阅读整个问题.
我想知道很长一段时间,为什么ArrayList
和其他类实现List,Set等,没有提供一个简单的构造函数来接受参数的变量计数?
List<Integer> list = new ArrayList<>(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
这看起来简单明了.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); }};
Run Code Online (Sandbox Code Playgroud)
...除非我们乐意升级到Java 9或向上面的一个util库添加依赖项,或者创建一个扩展ArrayList
和编写我们自己的构造函数的类.
最后,我问的问题:是什么原因使设计师省略了这个构造函数?
你可以说我已经存在一个构造函数ArrayList(int initialCapacity),它"构造一个具有指定初始容量的空列表"(同一页面的源代码) - 我知道这与我的想法相冲突,但说实话:我们多少次不得不提前声明ArrayList的大小?我们不需要具有用于ex的预定义值的ArrayList.单元测试数据?仅99.9%的情况下,默认情况下初始化new ArrayList<>()
哪些调用是不够的this(10)
?
每个List::add(..)
调用一个方法来确保存储大量数据的数组的数组的大小,并且具有预定义大小的ArrayList的构造函数是受欢迎的 - 所以,为什么我们不使用数组?之后我们需要编辑大型数组吗?-将其添加到使用Arrays.asList(阵列)ArrayList中它要求System.arraycopy
只是一次,或者我们可以的ensureCapacity.
这是我在浏览java.util中的一些类之后理解ArrayList的当前设计的方式.请纠正我的理解错误或知识不足的地方.
是否有任何技术问题解释为什么构造函数 new ArrayList<>(1, 2, 3)
没有实现?
ArrayList
存在于Java 1.2中. Varargs是Java 1.5中引入的一项功能(以及一大堆其他功能).
您可以实现列表的vararg初始化所需的所有功能Arrays.asList
,由于使用了varargs,因此必须在Java 1.5之前或之后存在.