【发布时间】:2021-12-17 02:31:20
【问题描述】:
有没有办法用 X 个相同的对象快速初始化一个新的 ArrayList 对象?
这是一个示例代码:
private List<String> initStringArrayList(int size, String s) {
List<String> list = new ArrayList<>(size);
while (size-- > 0) {
list.add(s);
}
return list;
}
我希望得到相同的结果,但对于较大的“大小”值要快得多。
当然,我可以使用以下代码:
private List<String> initStringArrayList(int size, String s) {
String[] array = new String[size];
Arrays.fill(array, s);
return new ArrayList<>(Arrays.asList(array));
}
但是 ArrayList() 的构造函数会复制整个数组,而不是在内部使用它。这是不可接受的。
还有其他方法吗?我需要一个 ArrayList 作为结果,而不仅仅是一个列表。它应该是任何类型的,而不仅仅是字符串。
感谢您的任何回答!
【问题讨论】:
-
如果您正在寻找一个非常有效的解决方案(因为您说复制数组是不可接受的):您可以实现自己的
List,给定任何Object和@987654325 @ 简单地返回所有对get(int)和0 <= index < size的调用的对象。 -
当然,这会很快。但我强烈需要一个 ArrayList 作为结果。谢谢你的提示。
-
我以前不知道,但这实际上正是
Collections.nCopies所做的。今天学到了一个新东西:)
标签: java arraylist initialization allocation