Maison > Java > javaDidacticiel > le corps du texte

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

PHPz
Libérer: 2023-08-25 23:48:22
original
1729 Les gens l'ont consulté

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(); // 删除元素
    }
}
Copier après la connexion
  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); // 删除元素
    }
}
Copier après la connexion
  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()); // 删除元素
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal