我希望 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);
我遇到了这个异常:
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/