コレクション内の同時変更例外
に質問
私は1つの集合があって、以下、私は中に“world”のこの要素があるかどうかを判断したいです.もしあるならば、私は1つの“javaee”の要素を追加して、コードを書いて実現してください.
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/*
( ConcurrentModificationException)
*/
public class ListIteratorDemo2 {
public static void main(String[] args) {
// List
List list = new ArrayList();
//
list.add("hello");
list.add("world");
list.add("java");
//
Iterator it = list.iterator();
while (it.hasNext()) {
String s = (String) it.next();
if ("world".equals(s)) {
list.add("javaee");
System.out.println("list:" + list);
}
}
}
}
ConcurrentModificationException:メソッドがオブジェクトの同時変更を検出したが、この変更が許可されていない場合、この例外を放出します.
発生原因:
反復器は集合に依存して存在し,判断に成功した後,集合の中に要素が新たに追加されたが,反復器は知らなかったので,エラーを報告し,このエラーを同時修正異常と呼ぶ.実はこの問題は、反復器が要素を遍歴するとき、集合によって要素を修正することはできません.
解決方法:
A:反復器反復要素、反復器修正要素はさっき反復した要素の後ろについています.B:集合遍歴要素、集合修正要素(通常for)要素が最後に追加されました.
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorDemo2 {
public static void main(String[] args) {
// List
List list = new ArrayList();
//
list.add("hello");
list.add("world");
list.add("java");
// 1: ,
// Iterator , ListIterator
// ListIterator lit = list.listIterator();
// while (lit.hasNext()) {
// String s = (String) lit.next();
// if ("world".equals(s)) {
// lit.add("javaee");
// }
// }
// 2: , ( for)
for (int x = 0; x < list.size(); x++) {
String s = (String) list.get(x);
if ("world".equals(s)) {
list.add("javaee");
}
}
System.out.println("list:" + list);
}
}