Converting a subList of an ArrayList to an ArrayList
Im using an ArrayList and im trying to copy a part of it to another ArrayList therefore im using:
sibling.keys = (ArrayList<Integer>) keys.subList(mid, this.num);
Where "sibling.keys" is the new ArrayList and "keys or this.keys" is the older ArrayList.
I used the casting because eclipse told me to do that but then it throws a ClassCastException
:
java.util.ArrayList$SubList cannot be cast to java.util.ArrayList
Any advice?
Solution 1:
subList
returns a view on an existing list. It's not an ArrayList
. You can create a copy of it:
sibling.keys = new ArrayList<Integer>(keys.subList(mid, this.num));
Or if you're happy with the view behaviour, try to change the type of sibling.keys
to just be List<Integer>
instead of ArrayList<Integer>
, so that you don't need to make the copy:
sibling.keys = keys.subList(mid, this.num);
It's important that you understand the difference though - are you going to mutate sibling.keys
(e.g. adding values to it or changing existing elements)? Are you going to mutate keys
? Do you want mutation of one list to affect the other?