簡體   English   中英

將ArrayList的subList轉換為ArrayList

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM