将ArrayList的subList转换为ArrayList

时间:2013-05-20 07:43:40

标签: java arraylist sublist

我使用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

有什么建议吗?

3 个答案:

答案 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);

请注意,演员表是可选的。