[英]Converting a subList of an ArrayList to an ArrayList
我使用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
有什么建议?
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
(例如sibling.keys
添加值或更改现有元素)? 你要改变keys
吗? 你想要一个列表的变异影响另一个吗?
你得到类强制转换异常,因为你期望一个ArraList,而ArrayList.subList()不返回ArrayList。 将您的sibling.keys从ArrayList更改为List ,并且应该可以正常工作。 这将避免ClassCastException以及您不需要和任何强制转换。
Array.subList
不返回ArrayList
,而是返回List
。
所以以下行有效:
List<Integer> keys = (List<Integer>) keys.subList(mid, this.num);
请注意,演员阵容是可选的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.