Souvent, nous souhaitons supprimer certains éléments d’une collection. Certains pourraient écrire ceci.
Copiez le code comme suit :
public void opera(Liste liste){
for (Itérateur it = list.iterator(); it.hasNext();) {
String str = (String)it.next();
if (str.equals("chengang")){
list.remove(str);
}
}
}
Dès que cette méthode d'écriture est exécutée, l'exception suivante sera signalée :
Exception dans le thread "main" java.util.ConcurrentModificationException
sur java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
Car les éléments de la liste ne peuvent pas être supprimés tant qu'elle est dans la boucle. Plus tard, j'ai fait ça, une méthode très stupide. L'idée est la suivante : créer une liste pour stocker spécifiquement les éléments à supprimer. Après la boucle, utilisez la méthode List.removeAll pour supprimer les éléments. Le code est le suivant :
Copiez le code comme suit :
public void opera(Liste liste){
Liste RemoveList= new ArrayList();
for (Itérateur it = list.iterator(); it.hasNext();) {
String str = (String)it.next();
if (str.equals("chengang")){
RemoveList.add(str);
}
}
list.removeAll(removeList);
}
Cela peut effectivement résoudre le problème, mais la méthode est trop lourde. En fait, il peut exister une méthode plus simple et plus efficace, qui consiste à utiliser la méthode Iterator.remove, comme suit :
Copiez le code comme suit :
for (Itérateur it = list.iterator(); it.hasNext();) {
String str = (String)it.next();
if (str.equals("chengang")){
it.remove();
}
}
Ainsi, plus vous connaîtrez les bases de Java, plus votre code sera simple. Au contraire, si votre code est particulièrement complexe, il doit y avoir un problème avec la méthode ou la conception.