2013-05-20 11 views
25

イムへのArrayListのサブリストの変換:使用してイムので、別のArrayListにその一部をコピーしようとしているのArrayListとイムを使用してArrayListの

「sibling.keysは」新しいのArrayListでどこで、 "keysまたはthis.keys"は古いArrayListです。 日食はそれを行うために私に言ったが、その後、それはClassCastExceptionをスローするので、私はキャストを使用:

java.util.ArrayListの$サブリストはjava.util.ArrayListの

何かアドバイスにキャストすることはできませんか?

答えて

71

subListは、ビューを既存のリストに戻します。 ArrayListではありません。あなたはそれのコピーを作成することができます。

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

それとも、ビューの行動に満足している場合、あなたは必要がないようにだけ、List<Integer>代わりにArrayList<Integer>するsibling.keysの種類を変更してみてくださいあなたはsibling.keys(例えば、それまでの値を追加または変更する既存の要素)を変異させるしようとしている -

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

それはあなたがが違いを理解することが重要です:コピーを作るには? keysに突然変異させるつもりですか?あるリストの突然変異を他のリストに影響させたいですか?

+0

私のために働いたもう一つの簡単なオプションは、sibling.keys.addAll(keys.subList(mid、this.num)); これは、sibling.keysが既に初期化されていることを前提としています。 addAll()は、単にサブリストの各項目をコピーします。 –

-1

Array.subListArrayListが返されますが、Listは返されません。

だから、次の行は動作します:キャストがオプションであることを

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

注意を。

+1

既に 'List 'を返します。このキャストは冗長です。 – IlyaEremin

0

ArrayList.subList()がArrayListを返さない間にArraListを期待しているので、クラスキャスト例外が発生します。 sibling.keysをArrayListからListに変更しても問題ありません。これにより、ClassCastExceptionを避けることができます。また、キャストする必要はありません。