コレクションを反復しながらコレクションを削除する最も安全な方法は、まずIterator
を取得し、必要に応じてループを実行して削除することです。Iteratorのremoveメソッドが実際にオブジェクトを削除する方法
は何
Iterator iter=Collection.iterator();
while(iter.hasNext()){
Object o=iter.next()
if(o.equals(what i'm looking for)){
iter.remove();
}
}
:
for(Object o:myCollection().getObjects()){
if(o.equals(what i'm looking for)){
myCollection.remove(o);
}
}
は何、ConcurrentModificationException
がスローされます「技術用語で」Iterator.remove()
は何ですか?オブジェクトを削除してループを解除し、ループを再開しますか?
私は公式ドキュメントで参照してください。
は、「現在の要素を削除し 試みは次の ()への呼び出しによって先行されていないこと
remove()
を呼び出すために行われた場合IllegalStateException
をスローします。」
部分は、私は「通常の」ループで起こって正確に同じような状況を考えるになり、「現在の要素を削除します」=>(等号のテストを行い、必要に応じて削除)が、なぜイテレータループがありますConcurrentModification-安全?
あなたが自分で見ることができます。https:/ /gist.github.com/kibotu/e480bd7505615a7311a6 –