Ho scritto questo esempio a seguito di un concetto di prova ConcurrentModificationException
:Perché non il mio campione tiro ConcurrentModificationException
public class Person
{
String name;
public Person(String name)
{
this.name = name;
}
}
public static void main(String[] args)
{
List<Person> l = new ArrayList<Person>();
l.add(new Person("a"));
l.add(new Person("b"));
l.add(new Person("c"));
int i = 0;
for(Person s : l)
{
if(s.name.equals("b"))
l.remove(i);
i++;
}
for(Person s : l)
System.out.println(s.name);
}
Quando ho eseguito il metodo principale sopra, ConcurrentModificationException
non ottiene gettati e le stampe console di output il seguente risultato :
a
c
By con la mia conoscenza di questo problema, quando in un ciclo per la lista, quando si modifica la lista, un'eccezione ConcurrentModificationException
deve essere gettato. Ma perché nel mio esempio non si verifica questo?
Non v'è alcuna garanzia * * che le modifiche strutturali alla lista getteranno un 'ConcurrentModificationException'. – aioobe
Probabilmente a causa dei dettagli di implementazione di ArrayList. Leggi https://stackoverflow.com/questions/18448671/how-to-avoid-concurrentmodificationexception-while-removing-elements-from-arr – Armand
Perché il tuo loop termina subito dopo "remove". Otterrai l'eccezione se aggiungi un quarto elemento dopo "c" o se rimuovi la persona "a". – Marvin