1. 使用for each 語句進行刪除
public class ConcurrentModificationException
extends RuntimeException
當方法檢測到對象的並發修改,但不允許這種修改時,拋出此異常。
例如,某個線程在 Collection 上進行迭代時,通常不允許另一個線性修改該 Collection。通常在這些情況下,迭代的結果是不確定的。如果檢測到這種行為,一些迭代器實現(包括 JRE 提供的所有通用 collection 實現)可能選擇拋出此異常。執行該操作的迭代器稱為快速失敗 迭代器,因為迭代器很快就完全失敗,而不會冒着在將來某個時間任意發生不確定行為的風險。
2. 傳統的for循環進行刪除
Debug跟蹤后發現,原來,集合刪除元素時,集合的size會變小,連帶索引都會改變!
解決方法:
1. 用傳統for循環,從集合最后元素向前循環刪除元素,集合的size會變小,連帶索引都會改變,但不會影響到前面的未循環元素。
for(int s=a.size()-1;s>=0;s--){
if(a.get(s).intValue()==333){
a.remove(s);
}
}
2. 使用Iterator的remove()方法刪除集合中的元素
List<SharedBoardSmsWrapper> source;
Iterator<SharedBoardSmsWrapper> sourceIt=source.iterator();
ConcurrentHashMap<String, String> smsMap;
Iterator<Entry<String, String>> iterator = smsMap.entrySet() .iterator();
while (iterator.hasNext()) {
if () {
} else {
iterator.remove();
}
}