Chr*_*ian 0 java allocation initialization arraylist
有没有办法用X个相同的对象快速初始化一个新的ArrayList对象?
这是一个示例代码:
private List<String> initStringArrayList(int size, String s) {
List<String> list = new ArrayList<>(size);
while (size-- > 0) {
list.add(s);
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
我想要得到相同的结果,但对于大的“大小”值来说要快得多。
当然,我可以使用这段代码:
private List<String> initStringArrayList(int size, String s) {
String[] array = new String[size];
Arrays.fill(array, s);
return new ArrayList<>(Arrays.asList(array));
}
Run Code Online (Sandbox Code Playgroud)
但是 ArrayList<>() 的构造函数会复制整个数组,而不是在内部使用它。这是不可接受的。
还有其他方法吗?我需要一个 ArrayList 作为结果,而不仅仅是一个列表。它应该是任何类型,而不仅仅是字符串。
谢谢您的任何答复!
使用Collections.nCopies,并将其复制到 ArrayList 中:
private <T> List<T> initStringArrayList(int size, T s) {
return new ArrayList<>(Collections.nCopies(size, s));
}
Run Code Online (Sandbox Code Playgroud)
这假设您确实希望List最后有一个可变的。如果你可以使用带有项目size时间的不可变列表,Collections.nCopies(size, s)那么它本身就可以工作:它内存效率高,分配速度快等。
| 归档时间: |
|
| 查看次数: |
1820 次 |
| 最近记录: |