[英]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.