Maison > Java > javaDidacticiel > Comment résoudre l'exception de l'itérateur Java (IteratorException)

Comment résoudre l'exception de l'itérateur Java (IteratorException)

WBOY
Libérer: 2023-08-17 22:43:45
original
1678 Les gens l'ont consulté

Comment résoudre lexception de litérateur Java (IteratorException)

Comment résoudre Java IteratorException (IteratorException)

Dans la programmation Java, un itérateur (Iterator) est une structure de données couramment utilisée pour parcourir les éléments d'une collection ou d'une liste. Cependant, si vous utilisez les itérateurs de manière incorrecte, des exceptions d'itérateur (IteratorException) peuvent être levées, provoquant des erreurs de programme.

Cet article présentera les causes courantes des exceptions des itérateurs et comment utiliser correctement les itérateurs pour éviter les exceptions.

Raison 1 : modification simultanée

Un itérateur est conçu pour parcourir des éléments dans une collection ou une liste pendant le processus de parcours, il doit acquérir un verrou sur la structure de données interne pour garantir l'exactitude du parcours. Par conséquent, lorsque d'autres threads modifient la collection ou la liste pendant le processus de parcours de l'itérateur, une exception de modification simultanée (ConcurrentModificationException) se produit.

Exemple de code :

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("a")) {
        list.remove(item); // 在遍历过程中删除元素
    }
}
Copier après la connexion

Solution :

Pendant le processus de parcours de l'itérateur, n'utilisez pas la méthode de modification de l'ensemble ou de la liste (telle que supprimer) pour modifier les données, mais utilisez la méthode de suppression de l'itérateur.

Exemple de code modifié :

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("a")) {
        iterator.remove(); // 使用迭代器的remove方法来删除元素
    }
}
Copier après la connexion

Cause deux : mauvais statut de l'itérateur

Les itérateurs ont trois états : disponible (hasNext), acquis (next) et supprimé (supprimer). Lorsque vous utilisez correctement les itérateurs, vous devez appeler ces méthodes dans le bon ordre. Sinon, une exception d'itérateur sera levée.

Exemple de code :

List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");

Iterator<String> iterator = list.iterator();

while (iterator.hasNext()) {
    iterator.remove(); // 错误的调用了remove方法,应该在调用next后再调用remove
    String item = iterator.next();
    System.out.println(item);
}
Copier après la connexion

Solution :

Utilisez correctement la séquence de méthodes itérateurs : appelez d'abord la méthode hasNext, puis appelez la méthode suivante et enfin appelez la méthode Remove.

Exemple de code modifié :

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();
    iterator.remove(); // 先调用next再调用remove
    System.out.println(item);
}
Copier après la connexion

Résumé :

Une utilisation appropriée des itérateurs est la clé pour éviter les exceptions des itérateurs. Pendant le processus de parcours, ne modifiez pas la collection ou la liste, mais utilisez la méthode Remove de l'itérateur pour supprimer des éléments. Dans le même temps, il est également très important d'appeler les méthodes itératrices (hasNext, next, remove) dans le bon ordre.

En suivant les principes ci-dessus, nous pouvons éviter l'apparition d'exceptions d'itérateur et rendre le programme plus robuste et fiable.

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