我有下面的代碼:ConcurrentModificationException的ArrayList中爲
private String toString(List<DrugStrength> aDrugStrengthList) {
StringBuilder str = new StringBuilder();
for (DrugStrength aDrugStrength : aDrugStrengthList) {
if (!aDrugStrength.isValidDrugDescription()) {
aDrugStrengthList.remove(aDrugStrength);
}
}
str.append(aDrugStrengthList);
if (str.indexOf("]") != -1) {
str.insert(str.lastIndexOf("]"), "\n ");
}
return str.toString();
}
當我嘗試運行它,我得到ConcurrentModificationException
,任何人都可以解釋爲什麼它會發生,即使代碼在同一個線程中運行?我怎麼能避免它?
[你應該停止擔憂和愛情愚弄。(http://blog.stackoverflow.com/2010/11/dr-strangedupe-or-how-我學習的到停止令人擔憂和愛的重複數據刪除/)。 – Will 2011-05-10 20:39:38
對此異常的解釋是ArrayList的迭代器是一個快速失敗的迭代器;即當它檢測到它在同一時間的收集已被修改時它將失敗(拋出異常)。與不引發併發修改異常的故障安全迭代器相比(例如,對集合ConcurrentHashMap和CopyOnWriteArrayList) – 2014-05-28 12:05:18