我想要它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)
归档时间: |
|
查看次数: |
11502 次 |
最近记录: |