次のコードを実行すると:
import java.util.LinkedList;
class Tester {
public static void main(String args[]) {
LinkedList<String> list = new LinkedList<String>();
list.add(new String("suhail"));
list.add(new String("gupta"));
list.add(new String("ghazal"));
list.add(new String("poetry"));
list.add(new String("music"));
list.add(new String("art"));
try {
for(String s : list) {
list.add(0,"art");
list.remove(6);
System.out.println(list);
}
}catch(Exception exc) {
exc.printStackTrace();
}
}
}
私は言う例外を受け取ります:
java.util.ConcurrentModificationException
at java.util.LinkedList$ListItr.checkForComodification(Unknown Source)
at java.util.LinkedList$ListItr.next(Unknown Source)
at Tester.main(Tester.java:14)
なぜこの例外が発生するのですか?
編集:tmpListは、各ノードにタイプDepConfAttrのオブジェクトが含まれるLinkedListです。DepConfAttrのオブジェクトの属性の1つであるメモリ(最も高いメモリが最初)に基づいてtmpListをソートしています。
上記のコードは、私が次のコードを通じて達成しようとしていることを反映しています
int size = tmpList.size();
int elementBC = 0; // element being checked
int startIndex = 1;
for (DepConfAttr dca : tmpList) {
long maxMem = dca.getMemory(); // Let this be the maximum memory
for(int i = startIndex ; i < size ; i++) {
DepConfAttr dcaTmp = tmpList.get(i);
if(maxMem < dcaTmp.getMemory()) {
tmpList.add(elementBC, dcaTmp);
tmpList.remove(i+1);
maxMem = tmpList.get(elementBC).getMemory();
}
}
elementBC++;
startIndex++;
size--;
}
なぜこの例外が発生するのですか?
アイテムを繰り返し処理しているときに、イテレーター以外の方法でリストからアイテムを削除しています。また、リストを繰り返し処理しているときに、リストに追加します。
ここで何を達成しようとしているのかは明確ではありませんが、並行コレクションを使用する場合を除いて、これを実行しようとすると常に例外が発生します。
これに対する一般的な修正の1つは、最初にリストのコピーを作成し、それを繰り返して、元のリストを変更することです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加