當我運行下面的代碼:爲什麼我會得到java.util.ConcurrentModificationException?
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是一個LinkedList,其每個節點包含一個DepConfAttr類型的對象。我正在基於內存(最高內存優先)排序tmpList,這是DepConfAttr對象的屬性之一。
上面的代碼反映了什麼,我想通過下面的代碼
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--;
}
重複時不要刪除。 –
你到底想要做什麼?我沒有看到你在循環中的任何地方使用's'? –
您正在迭代時添加和刪除。因此你有一個併發修改。爲了理解你應該做什麼,你必須去做你真正想做的事情,這是不明確的。 –