ArrayListのサブリストをArrayListに変換する

2013年05月20日に質問されました。  ·  閲覧回数 38.1k回  ·  ソース

yoavgray picture
2013年05月20日

ArrayListを使用していて、その一部を別のArrayListにコピーしようとしているため、次を使用しています。

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

ここで、「sibling.keys」は新しいArrayListであり、「keys orthis.keys」は古いArrayListです。 日食がそうするように私に言ったので私は鋳造を使用しました、しかしそれからそれはClassCastException投げます:

java.util.ArrayList $ SubListをjava.util.ArrayListにキャストすることはできません

何かアドバイス?

回答

Jon Skeet picture
2013年05月20日
98

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変更しますか(たとえば、値を追加したり、既存の要素を変更したりしますか)? keysますか? 1つのリストの変更が他のリストに影響を与えるようにしますか?

Ankur Shanbhag picture
2013年05月20日
0

ArrayList.subList()がArrayListを返さないのに、ArraListを期待しているため、クラスキャスト例外が発生します。 sibling.keysをArrayListからList