将ArrayList的subList转换为ArrayList

yoa*_*ray 35 java arraylist sublist

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

sibling.keys = (ArrayList<Integer>) keys.subList(mid, this.num);
Run Code Online (Sandbox Code Playgroud)

其中"sibling.keys"是新的ArrayList,"keys或this.keys"是旧的ArrayList.我使用了铸造,因为eclipse告诉我这样做但是它抛出了ClassCastException:

java.util.ArrayList $ SubList无法强制转换为java.util.ArrayList

有什么建议?

Jon*_*eet 87

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

sibling.keys = new ArrayList<Integer>(keys.subList(mid, this.num));
Run Code Online (Sandbox Code Playgroud)

或者,如果您对视图行为感到满意,请尝试将类型更改sibling.keys为仅List<Integer>代替ArrayList<Integer>,以便您不需要复制:

sibling.keys = keys.subList(mid, this.num);
Run Code Online (Sandbox Code Playgroud)

重要的是你要了解它们的区别 - 你是否会改变sibling.keys(例如为其添加值或更改现有元素)?你要改变keys吗?你想要一个列表的变异影响另一个吗?

  • 另一个对我有用的简单选项是sibling.keys.addAll(keys.subList(mid, this.num)); 这是假设sibling.keys 已经初始化。addAll() 只是复制子列表的每个项目。 (2认同)