我想要它b1并b2拥有自己的元素集,那么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);
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
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)
rat*_*eak 10
ArrayList(int)构造函数给出一个List大小为0 的构造函数,它只确保n在需要重新分配底层数组之前添加元素.
您可以复制列表的更好方法是:
b1.addAll(buffer);
b2.addAll(buffer);
Run Code Online (Sandbox Code Playgroud)
语义与第一次buffer.size()向每个数组添加空值并调用时的语义相同Collections.copy(b1,buffer);
如果您想要深层复制(元素也被复制),您将不得不分别处理每个元素
for(MyObject obj:buffer){
b1.add(obj.clone());
b2.add(obj.clone());
}
Run Code Online (Sandbox Code Playgroud)