Maison  >  Article  >  Java  >  Comment supprimer en toute sécurité des éléments d'un HashMap lors d'une itération ?

Comment supprimer en toute sécurité des éléments d'un HashMap lors d'une itération ?

DDD
DDDoriginal
2024-11-17 08:11:03815parcourir

How to Safely Remove Elements from a HashMap while Iterating?

Exception de modification simultanée lors de l'itération et de la suppression

Lors d'une itération sur un HashMap tout en effectuant des modifications simultanées (telles que la suppression d'éléments), une ConcurrentModificationException peut se produire. En effet, la référence interne de l'itérateur à la carte est invalidée par les modifications.

Solution initiale avec ArrayList

Une approche courante pour éviter cette exception consiste à créer une copie du jeu de clés de la carte à l'aide de new ArrayList<>(map.keySet()). Cependant, cette approche crée une copie inutile des clés, ce qui peut être inefficace.

Utiliser des itérateurs pour la suppression

Une solution plus efficace consiste à parcourir les entrées de la carte en utilisant un itérateur, ce qui nous permet de supprimer des éléments en toute sécurité. La méthode EntrySet() d'une carte renvoie un ensemble de ses entrées, qui ont chacune une méthode getKey() et getValue().

Exemple de code :

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();
    }
}

Dans cet exemple, nous parcourons les entrées de la carte et supprimons la clé "test" en toute sécurité. L'itérateur gère les modifications nécessaires à la structure interne de la carte, empêchant l'exception ConcurrentModificationException.

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