0

反復中に ArrayList を変更すべきではないことはわかっています。

しかし、私は Iterator を使用してリストを反復処理し、 iterator.remove() を使用して要素を削除していますが、それでも ConcurrentModification Exception が発生します。

私のプログラムはマルチスレッド化されていません。

私は多くのarraylistを持っています[クラスにはそれが含まれており、オブジェクトの多くの配列を処理しています]

for(int i=0;i<obj.length;i++)
{
    if(k==i) continue;

    it = obj[i].arraylist.iterator();

    while(it.hasNext()){
    value = it.next();

      if(condn)  {
       it.remove();
       obj[k].arraylist.add(value);
       //k and i are not same 

      }

    }

}

4

2 に答える 2

1

「Iterator.remove は、反復中にコレクションを変更する唯一の安全な方法であることに注意してください。反復の進行中に、基になるコレクションが他の方法で変更された場合、動作は規定されていません。」

反復中にオブジェクトを削除することはできますが、新しいオブジェクトを追加することはできません。そのため、ConcurrentModificationException が発生します。

http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html

編集:次のことも確認できます。

if(k==i || obj[i].arraylist == obj[k].arraylist) continue;
于 2013-09-05T06:51:59.863 に答える