Maison  >  Article  >  Java  >  Comment réparer : erreur de collection Java : exception de traversée de collection

Comment réparer : erreur de collection Java : exception de traversée de collection

PHPz
PHPzoriginal
2023-08-25 23:48:221708parcourir

Comment réparer : erreur de collection Java : exception de traversée de collection

Comment résoudre : erreur de collection Java : exception de traversée de collection

Introduction :
Dans le développement Java, les collections sont des structures de données très couramment utilisées pour stocker et manipuler un ensemble de données. Cependant, lors de l'utilisation de collections pour des opérations de parcours, des exceptions de parcours de collections sont souvent rencontrées. Cet article décrit la cause et la solution de ce problème et fournit des exemples de code correspondants.

1. Causes des exceptions de traversée de collection :
Lorsque nous utilisons des itérateurs ou des boucles for-each pour parcourir une collection, si la collection est modifiée pendant le processus de traversée (comme l'ajout ou la suppression d'éléments), une exception ConcurrentModificationException sera levée. En effet, pendant le processus de parcours, l'itérateur ou la boucle for-each maintiendra un compteur pour détecter si la structure de la collection a changé et lèvera une exception une fois qu'un changement est trouvé.

2. Solution :

  1. Utilisez Iterator pour parcourir la collection et utilisez la méthode Remove() d'Iterator pour supprimer des éléments pendant le processus de traversée. Un exemple est le suivant :
List<String> list = new ArrayList<>();
// 添加元素
list.add("A");
list.add("B");
list.add("C");

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    if (item.equals("B")) {
        iterator.remove(); // 删除元素
    }
}
  1. Lorsque vous utilisez une boucle for normale pour parcourir une collection, vous pouvez utiliser la méthode remove() de List pour supprimer des éléments, et vous devez parcourir la collection dans l'ordre inverse pour éviter les modifications dans l'indice. Les exemples incluent :
List<String> list = new ArrayList<>();
// 添加元素
list.add("A");
list.add("B");
list.add("C");

for (int i = list.size() - 1; i >= 0; i--) {
    String item = list.get(i);
    if (item.equals("B")) {
        list.remove(i); // 删除元素
    }
}
  1. Utilisez des classes de collection simultanées comme ConcurrentHashMap ou CopyOnWriteArrayList, qui permettent de modifier la collection pendant le parcours sans lever d'exceptions. Un exemple est le suivant :
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
// 添加元素
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    if (entry.getValue() == 2) {
        map.remove(entry.getKey()); // 删除元素
    }
}

Conclusion :
L'exception de traversée de collection est causée par la modification de la collection pendant le processus de traversée. Pour résoudre ce problème, nous pouvons utiliser un itérateur pour parcourir la collection et utiliser la méthode Remove(), utiliser une boucle for normale pour parcourir la collection et utiliser la méthode Remove() de List, ou utiliser une classe de collection simultanée. Choisir la solution appropriée peut efficacement éviter le problème des exceptions de parcours de collection et garantir le fonctionnement normal du programme.

Nombre total de mots : 437 mots

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn