-3

AndroidでConcurrentModificationException使用する場合の回避方法は?ArrayList

誰かがそれを避けるための基本的な経験則を与えることができますか?

4

3 に答える 3

7

配列リストを反復処理するときに要素を追加/削除しないことにより。

このコードは、反復中にリストを変更しているため、ConcurrentModificationException をスローします。

List<String> al = new ArrayList<String>();
al.add("2");
for(String s: al) {
al.remove("2");
}

このコードは ConcurrentModificationException をスローしません。

 List<String> al = new Arraylist<String>();
 Iterator<String> itr = al.iterator();
 while(itr.hasNext()){
   itr.next();
   itr.remove();
 }    

反復中にリストを変更してもスローされないjava.util.concurrent.CopyOnWriteArrayListなどのjava.util.Concurrentパッケージのクラスの一部を使用することもできます。ConcurrentModificationException

  CopyOnWriteArrayList<String> al = new CopyOnWriteArrayList<String>();
  al.add("2");
  Iterator<String> itr = al.iterator();
  while(itr.hasNext()){
  itr.next();
  al.add("3");
 }
于 2012-12-06T13:47:38.733 に答える
1

ArrayList 内の要素を削除する場合は、Iterator を使用します。例えば:

ArrayList<String> someStrings;
// fill someStrings
Iterator<String> it = someStrings.iterator();
while(it.hasNext()){
   String buf = it.next();
   // do sth here
}
于 2012-12-06T13:55:58.793 に答える
0

これは、反復処理中に ArrayList に要素を追加/削除/挿入すると発生します。

悪いコードの例:

Iterator it = list.iterator()
while (it.hasNext())
{
    Object o = it.next();
    list.remove(o);
}
于 2012-12-06T13:47:53.267 に答える