java - Collections.copy问题

标签 java collections

我希望 b1b2 有自己的元素集,那么 b1 和 b2 应该在内存中有自己的元素,这样当 b1/b2 被修改时,其他人不应该受到影响。

buffer 是一个包含很多元素的ArrayList

List<Integer>  b1 = new ArrayList<Integer>(buffer.size()) ;
List<Integer>  b2 = new ArrayList<Integer>(buffer.size()) ) ;
Collections.copy(b1, buffer);
Collections.copy(b2, buffer);

我遇到了这个异常:

Exception in thread "main"
java.lang.IndexOutOfBoundsException: Source does not fit in dest
    at java.util.Collections.copy(Collections.java:531)
    at Trees.containsSumPrint(Trees.java:243)
    at Trees.main(Trees.java:125)

最佳答案

ArrayList(int) 构造函数给出了一个大小为 0 的 List 它只确保可以在需要之前添加 n 元素重新分配底层数组。

复制列表的更好方法是:

b1.addAll(buffer);
b2.addAll(buffer);

语义与您首先向每个数组添加 buffer.size() 空值并调用 Collections.copy(b1,buffer); 时相同/p>


如果你想要一个深拷贝(元素也被复制),你将不得不分别处理每个元素

for(MyObject obj:buffer){
    b1.add(obj.clone());
    b2.add(obj.clone());
}

关于java - Collections.copy问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5974407/

相关文章:

java - 如何在 JAX-WS Web 服务中返回自定义复杂类型?

java - 如何决定何时在 selenium webdriver 中使用 try catch block

java - 如何创建一个内部包含多个多边形可绘制对象的按钮(在 LibGDX 中)

java - 括号之间的简单正则表达式

java - Collections.sort(),给出 "unchecked or unsafe operation"错误?

java - 将 Hashmap 用于键的多个值,为什么?

collections - kotlin中flatMap vs map的用例是什么

java - 如何在 Play 中设置默认 PostgreSQL schema?

java - 将具有不同值的相同对象写入集合

java - 如何查看 java.util.PriorityQueue 的尾部?