2013-05-19 11 views
5

Javaでサブリストを作成し、前のリストからサブリストにある値を削除したいとします。私のプログラムは正しくsubListを作成しますが、それはpreviousListから正しい値を削除しません。Javaサブリストを作成して前のリストから値を削除する

マイコード:最初j=0

for(int i=0; i<4; i++){ 
    List<Object> sub=new ArrayList<Object>(prevoiusList.subList(0,6)); 

    for (int j=0; j<6; j++){ 
     previousList.remove(j); 
    } 
}  

答えて

9

、あなたが最初の要素を削除します。そうするとき、他のすべての要素をシフトするので、2番目の要素が最初になるなどです。この問題を解決するために次の反復j=1

、あなたはもともと3位だった第二の要素を取り除くので...

は、唯一0インデックス、またはイテレータを使用しています。

1

なぜあなたはちょうど行ういけない:

previousList = previousList.subList(7, previousList.size()); 
+0

をそれをしなさい8/docs/api/java/util/List.html#subList-int-int-)docs、元のリストの_view_を返します。したがって、サブリストの変更を実行すると、 'java.util.ConcurrentModificationException'に終わる可能性があります。 – Radu

0

別のリストを作成するために、1つのリストから、6つの要素を "移動" するには:

List<Object> list; 
List<Object> subList = new ArrayList<Object>(list.subList(0, 6)); 
list.removeAll(subList); 

List.subList()は、ビューを返すことに留意すべきですorigianlリストへの変更がサブリストに反映され、新しいリストが作成され、そのサブリストがコンストラクタに渡されます。ループ内でこれを入れて

List<Object> list; 
while (list.size() > 5) { 
    List<Object> subList = new ArrayList<Object>(list.subList(0, 6)); 
    list.removeAll(subList); 
    // do something with subList 
} 
// list now has 0-5 elements 
+0

元のリストに同じ値が複数回現れた場合、そのすべてのインスタンスがremoveAll()によって削除されます。これは予想外の結果を招く可能性があります。 – MatsT

0

[リスト#サブリスト](https://docs.oracle.com/javase/をチェックし、単一の行に

prevoiusList.subList(0,6).clear() 
関連する問題