Maison >Java >javaDidacticiel >Comment supprimer en toute sécurité des entrées d'une carte simultanée lors d'une itération ?

Comment supprimer en toute sécurité des entrées d'une carte simultanée lors d'une itération ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-12 10:21:02325parcourir

How to Safely Remove Entries from a Concurrent Map While Iterating?

Itération et suppression d'une carte simultanée

Lors de la modification d'une carte pendant l'itération, il est crucial d'éviter les erreurs ConcurrentModificationException. L'approche classique consistant à utiliser for (Object key : map.keySet()) échoue car des modifications de carte peuvent se produire pendant la boucle.

Une solution de contournement courante consiste à copier l'ensemble de clés dans une nouvelle collection, comme indiqué dans for (Clé d'objet : new ArrayList(map.keySet())). Cependant, cette approche crée une copie inutile.

Une meilleure solution consiste à utiliser un itérateur pour supprimer les entrées de la carte. Voici un exemple :

Map<String, String> map = new HashMap<>();
map.put("test", "test123");
map.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();
    }
}

Ce code utilise un itérateur pour supprimer en toute sécurité des entrées de la carte. La méthode remove() de l'itérateur supprime l'entrée actuelle, permettant des modifications de carte sûres et efficaces pendant l'itération.

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