如何用相同的对象x次初始化ArrayList? [复制]

Posted

技术标签:

【中文标题】如何用相同的对象x次初始化ArrayList? [复制]【英文标题】:How to initialize ArrayList with same object x times? [duplicate] 【发布时间】: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 &lt;= index &lt; size 的调用的对象。 当然,这会很快。但我强烈需要一个 ArrayList 作为结果。谢谢你的提示。 我以前不知道,但这实际上正是Collections.nCopies 所做的。今天学到了一个新东西:) 【参考方案1】:

使用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? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何用Jpype创建HashMap和ArrayList

如何用另一个arraylist的内容替换arraylist的内容?

如何用 NSMutableArray 初始化 NSData 对象?

如何用值声明一个 ArrayList? [复制]

如何用两个指针初始化类的对象?

创建对象的 Arraylist