Lorsque nous exécutons le programme ci-dessus, nous obtenons java.util.ConcurrentModificationException
dès que le ArrayList
est modifié. Cela arrive parce que l'itérateur ArrayList
est défaillant par conception. Cela signifie qu'une fois l'itérateur créé, si le ArrayList
est modifié, il lance un ConcurrentModificationException
.CopyOnArrayList modification simultanée
public class ConcurrentListExample {
public void someMethod() {
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
// get the iterator
Iterator<String> it = list.iterator();
//manipulate list while iterating
while (it.hasNext()) {
String str = it.next();
System.out.println(str);
if (str.equals("2")) {
list.remove("5");
}
if (str.equals("3")) {
list.add("3 found");
}
if(str.equals("4")) {
list.set(1, "4");
}
}
}
}
mais si nous prenons Employee
classe:
public class Test {
public static void main(String[] args) {
List al = new ArrayList();
Employee ee = new Employee(1, "anoj");
Employee ee1 = new Employee(2, "hai");
al.add(ee);
al.add(ee1);
Iterator it = al.iterator();
while (it.hasNext()) {
Employee hh = (Employee)it.next();
if (hh.getName().equals("anoj")) {
al.remove(0);
System.out.println(al);
}
}
}
}
Je n'ai pas eu ConcurrentModificationException
.
Son correct « Vous devez ajouter ou supprimer un objet tout en réitérant. – Sarma
Pouvez-vous s'il vous plaît fixer le formatage? Il est difficile de voir ce qui se passe dans ce code. Dans le premier bloc, s'il vous plaît diminuer le niveau de retrait de façon à Dans le deuxième bloc, veuillez ajouter l'indentation appropriée, afin que les gens puissent lire votre question plus facilement et donner une réponse – yshavit
Quelle est la véritable question ici –