Ho il seguente pezzo di codice:ConcurrentModificationException per 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();
}
Quando provo a farlo funzionare, ottengo ConcurrentModificationException
, qualcuno può spiegare perché succede, anche se il codice è in esecuzione in stesso thread? E come potrei evitarlo?
[si dovrebbe smettere di preoccuparmi e ad amare creduloni.] (Http://blog.stackoverflow.com/2010/11/dr-strangedupe-or-how- i-imparato-to-stop-preoccupante-e-amore-duplicazione /). – Will
Una spiegazione di questa eccezione è che l'iteratore di ArrayList è un iteratore fail-fast; cioè fallirà (lancia un'eccezione) quando rileva che la sua collezione nel frattempo è stata modificata. Rispetto agli iteratori fail-safe che non generano eccezioni di modifica simultanea (ad esempio, sulle raccolte ConcurrentHashMap e CopyOnWriteArrayList) –