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!