将数组列表的子列表转换为数组列表

2022-08-31 20:09:50

我使用ArrayList,并且我试图将其的一部分复制到另一个ArrayList,因此im使用:

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

其中“sibling.keys”是新的ArrayList,“keys or this.keys”是旧的ArrayList。我使用了铸造,因为eclipse告诉我这样做,但后来它抛出了一个:ClassCastException

java.util.ArrayList$SubList 不能强制转换为 java.util.ArrayList

有什么建议吗?


答案 1

subList返回现有列表的视图。这不是.您可以创建它的副本ArrayList

sibling.keys = new ArrayList<Integer>(keys.subList(mid, this.num));

或者,如果您对视图行为感到满意,请尝试将 的类型更改为 仅是 而不是 ,这样您就不需要复制:sibling.keysList<Integer>ArrayList<Integer>

sibling.keys = keys.subList(mid, this.num);

但是,了解差异很重要 - 您是否要进行更改(例如,向其添加值或更改现有元素)?你会变异吗?您是否希望一个列表的突变影响另一个列表?sibling.keyskeys


答案 2

您会收到类强制转换异常,因为您期望一个ArraList,而ArrayList.subList()不返回ArraList。将你的兄弟姐妹.keys从 ArrayList 更改为 List,并且应该可以正常工作。这将避免ClassCastException,以及您不需要和任何强制转换。


推荐