我使用ArrayList并尝试将其中的一部分复制到另一个ArrayList,因此使用:
sibling.keys = (ArrayList<Integer>) keys.subList(mid, this.num);
其中“sibling.keys”是新的ArrayList,“keys或this.keys”是旧的ArrayList。
我使用了铸造因为eclipse告诉我这样做但是然后抛出ClassCastException
:
java.util.ArrayList $ SubList无法强制转换为java.util.ArrayList
有什么建议吗?
答案 0 :(得分:84)
subList
会在现有列表中返回视图。这不是ArrayList
。您可以创建它的副本:
sibling.keys = new ArrayList<Integer>(keys.subList(mid, this.num));
如果您对观看行为感到满意,请尝试将sibling.keys
的类型改为List<Integer>
而不是ArrayList<Integer>
,这样您就不需要制作副本:
sibling.keys = keys.subList(mid, this.num);
重要的是你要了解其中的区别 - 你是否要改变sibling.keys
(例如为其添加值或更改现有元素)?你要改变keys
吗?你想要一个列表的变异影响另一个吗?
答案 1 :(得分:0)
您获得了类强制转换异常,因为您期望ArraList而ArrayList.subList()不返回ArrayList。 将您的sibling.keys从ArrayList更改为List ,并且应该可以正常工作。这将避免ClassCastException以及您不需要和任何演员。
答案 2 :(得分:-2)
Array.subList
不会返回ArrayList
,而是返回List
。
以下一行有效:
List<Integer> keys = (List<Integer>) keys.subList(mid, this.num);
请注意,演员表是可选的。