Maison  >  Article  >  Java  >  Comment supprimer en toute sécurité des éléments d’une carte pendant une itération ?

Comment supprimer en toute sécurité des éléments d’une carte pendant une itération ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-17 01:46:03572parcourir

How to Safely Remove Elements from a Map During Iteration?

Itérer et supprimer des éléments d'une carte : résoudre les exceptions de modification simultanées

Itérer sur une carte et supprimer ses éléments peut conduire à une ConcurrentModificationException . Cette exception se produit lorsqu'une collection Java est modifiée pendant une itération, créant un état désynchronisé entre l'itérateur et la collection sous-jacente.

Pour éviter cette exception, une approche courante consiste à créer une copie de l'ensemble. de clés avant de parcourir dessus. Dans votre code, la ligne suivante accomplit cela :

for (Object key : new ArrayList<Object>(map.keySet()))

Cette approche est efficace, mais il peut exister une solution plus efficace.

Utilisation d'un itérateur pour supprimer des entrées

Le Java Collections Framework fournit un itérateur qui permet la suppression en toute sécurité d'éléments pendant l'itération. L'exemple de code suivant montre comment utiliser l'itérateur pour supprimer l'entrée avec la clé « test » de la carte :

Map<String, String> map = new HashMap<String, String>() {
  {
    put("test", "test123");
    put("test2", "test456");
  }
};

for(Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); it.hasNext(); ) {
    Map.Entry<String, String> entry = it.next();
    if(entry.getKey().equals("test")) {
        it.remove();
    }
}

Cette solution utilise la méthode remove() de l'itérateur, qui supprime en toute sécurité l'entrée actuelle de la carte. Cette approche évite d'avoir à créer une copie distincte du jeu de clés et est généralement plus efficace, en particulier pour les grandes cartes.

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