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!