java.util.ConcurrentModificationException problème
Lorsque le processus de collecte Carte, et ont parfois besoin de retirer le filtre traitement de la collection Carte des clés.
Par exemple: La valeur de la clé est déterminée, ne doit pas répondre à la demande (valeur de clé n'est pas « key1 ») filtrer.
1, le code d'exécution est donnée comme suit:
publique classe TraverseMapTestDelete { publique statique vide principale (String [] args) { Carte <String, String> map = nouvelle HashMap <String, String> (); map.put ( "key1", "valeur1" ); map.put ( "key2", "valeur2" ); map.put ( "key3", "value3" ); pour (String key: map.keySet ()) { si ( "key1" equals (clé)) { map.remove (clé); } } Map.forEach ((clé, valeur) ->valeur)); } }
Compte tenu des informations comme suit:
Exception dans le thread "principal" java.util. ConcurrentModificationException à java.util.HashMap $ HashIterator.nextNode (HashMap.java: 1445 ) à java.util.HashMap $ KeyIterator.next (HashMap.java: 1469 ) à com.miracle.luna.lambda.TraverseMapTestDelete.main (TraverseMapTestDelete. java: 19)
2, le code correct est le suivant (avec l'utilisation d'un itérateur traversent la carte):
/ ** * Créé par le Miracle Luna 2020/3/17 * / publique classe TraverseMapDelete { publics statiques vides principaux (String [] args) { la carte <String, String> Plan = new new HashMap <String, String> (); Carte .put ( "key1", "valeur1" ); map.put ( "key2", "valeur2" ); map.put ( "key3", "valeur3" ); // lors de la traversée, ont supprimé certaines clés la demande -value, peut utiliser cette traversal) le Iterator <de Map.Entry <String, String = >> Iterator EnumMap.entrySet () iterator () .; tandis que (iterator.hasNext ()) { Map.Entry<String, String> entrée = iterator.next (); si ( "key1" equals (entry.getKey ())) { Iterator.remove (); } } Map.forEach ((clé, valeur) -> System.out.println (touche + ":" + valeur)); } }
[Note! ! ! ] Ici doit Iterator.remove (); clésuppression comme ils traversent le droit,
Plutôt que d' utiliser map.remove (entry.getKey ()); ou map.remove (entry.getKey (), entry.getValue ( ));
les résultats d'exécution sont les suivants:
key2: valeur2
key3: value3
Blog de référence : https://www.cnblogs.com/hanmou/p/4156052.html