Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java.lang.IndexOutOfBoundsException: Source does not fit in dest

On the following code:

static void findSubsets (ArrayList<Integer> numbers, int amount, int index) {     ArrayList <Integer> numbersCopy = new ArrayList<Integer>(numbers.size());     Collections.copy(numbersCopy, numbers); } 

I'm getting the error:

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) 

Why?

like image 245
andandandand Avatar asked May 27 '11 03:05

andandandand


1 Answers

Capacity does not equal size. The size parameter that you are passing in simply allocates enough memory for the size. It does not actually define elements. It's actually kind of a silly requirement of Collections.copy, but it is one nonetheless.

The key part from the Collections.copy JavaDocs:

The destination list must be at least as long as the source list. If it is longer, the remaining elements in the destination list are unaffected.

You should just pass the List to the ArrayList's constructor to copy all of the List to avoid the issue altogether.

like image 164
pickypg Avatar answered Oct 16 '22 00:10

pickypg