Converting a subList of an ArrayList to an ArrayList

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-02 18:49:28

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?

You get the class cast exception because you are expecting an ArraList while the ArrayList.subList()does not return ArrayList. Change your sibling.keys from ArrayList to List, and should work fine. This will avoid ClassCastException as well as you will not need to and any cast.

Array.subList doesn't return an ArrayList, but a List.

So the following line works :

List<Integer> keys = (List<Integer>) keys.subList(mid, this.num);

Note that the cast is optional.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!