如何用相同的对象初始化 ArrayList x 次?
How to initialize ArrayList with same object x times?
有没有办法用 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,而不仅仅是一个列表。它应该是任何类型,而不仅仅是字符串。
感谢您的回答!
使用Collections.nCopies
,并将其复制到ArrayList中:
private <T> List<T> initStringArrayList(int size, T s) {
return new ArrayList<>(Collections.nCopies(size, s));
}
这假设你真的想要一个可变的 List
最后。如果您可以使用包含项目 size
次的不可变列表,那么 Collections.nCopies(size, s)
本身就可以工作:它具有内存效率高、分配速度快等优点。
有没有办法用 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,而不仅仅是一个列表。它应该是任何类型,而不仅仅是字符串。
感谢您的回答!
使用Collections.nCopies
,并将其复制到ArrayList中:
private <T> List<T> initStringArrayList(int size, T s) {
return new ArrayList<>(Collections.nCopies(size, s));
}
这假设你真的想要一个可变的 List
最后。如果您可以使用包含项目 size
次的不可变列表,那么 Collections.nCopies(size, s)
本身就可以工作:它具有内存效率高、分配速度快等优点。