复制list1的内容到list2,结果报异常
java.lang.IndexOutOfBoundsException: Source does not fit in dest
static void findSubsets (ArrayList<Integer> numbers, int amount, int index){
ArrayList <Integer> numbersCopy = new ArrayList<Integer>(numbers.size());
Collections.copy(numbersCopy, numbers);
}
异常信息:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Source does not fit in dest
at java.util.Collections.copy(Collections.java:548)
at backtracking2.Main.findSubsets(Main.java:61)
它这里指的长度是List里的size()方法值,我们都知道new ArrayList()初始化的时候size()等于0,即便是你使用new ArrayList(10)来初始化,也只是预设了一个initialCapacity==10的存储空间,size()还是等于0。因此在使用Collections.copy之前,需要把目的List加一些空的元素,直到目的List的size()值与源List的size()值等长(或更长)。
或者用如下方法复制list:
public static void copyList(List dest ,List source )
{
dest.clear();
for( int i = 0 ; i < source.size() ; i++ )
{
dest.add( source.get( i ));
}
}
亦或:
List source = new ArrayList();
source.add("hello");
List destination = Arrays.asList(new Object[source.size()]);
Collections.copy(destination, source);