ホームページ >Java >&#&チュートリアル >Android で反復中に ArrayList に追加するときに ConcurrentModificationException を回避するにはどうすればよいですか?
Android で ArrayList に追加中の
ConcurrentModificationException は、反復処理中のリストに変更を加えているときによく発生します。この例外はさまざまなシナリオで発生する可能性があり、その 1 つはイテレーターを使用して ArrayList を変更する場合です。
提供されたコード スニペットでは、この問題は、新しい要素を mElements ArrayList に追加するときの OnTouchEvent イベント中に発生します。
for (Iterator<Element> it = mElements.iterator(); it.hasNext();){ Element element = it.next(); // ... if(element.cFlag){ mElements.add(new Element("crack",getResources(), (int)touchX,(int)touchY)); element.cFlag = false; } }
反復中にリストが (要素の追加によって) 変更されるため、ConcurrentModificationException がスローされます。
この問題に対処するには、反復中に追加する必要がある要素を保存する別のリストを利用することをお勧めします。
List<Element> thingsToBeAdded = new ArrayList<Element>(); for (Iterator<Element> it = mElements.iterator(); it.hasNext();) { Element element = it.next(); // ... if (element.cFlag) { // Instead of adding elements directly to mElements, add them to thingsToBeAdded thingsToBeAdded.add(new Element("crack", getResources(), (int) touchX, (int) touchY)); element.cFlag = false; } } mElements.addAll(thingsToBeAdded);
このアプローチを使用すると、元のリストへの変更は、要素を反復処理するまで延期できるため、ConcurrentModificationException.
が回避されます。以上がAndroid で反復中に ArrayList に追加するときに ConcurrentModificationException を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。