Ik heb een HashMap waar values in zitten die ik soms moet updaten. De eigenlijke situatie is iets complexer, maar vereenvoudigt komt het er op neer dat ik over alle keys van de map ittereer. Als de value dan een bepaalde waarde heeft verander ik deze in een andere value.
Je mag volgende de API tijdens het itereren over een HashMap geen "structural modification" doen, behalve door gebruik te maken van de add en remove methods van de iterator.
Nu vroeg ik me af of het updaten van een value ook onder een structural modification valt. Aan de ene kant zou je zeggen van wel, namelijk het is een add. Aan de andere kant, als de key hetzelfde is als de huidige key, zal de value dus ook in exact dezelfde bucket moeten vallen. De plek in de bucket kan natuurlijk wel verschillen als er al collisions zijn.
Het gaat om deze pseudo code (generic data en methods etc even weggehaald):
Als ik dit test met een groot aantal waardes komt er nooit een ConcurrentModificationException, maar dat zegt natuurlijk niets over het feit of dit stukje code theoretisch unsafe is.
Wat denken jullie?
Je mag volgende de API tijdens het itereren over een HashMap geen "structural modification" doen, behalve door gebruik te maken van de add en remove methods van de iterator.
Nu vroeg ik me af of het updaten van een value ook onder een structural modification valt. Aan de ene kant zou je zeggen van wel, namelijk het is een add. Aan de andere kant, als de key hetzelfde is als de huidige key, zal de value dus ook in exact dezelfde bucket moeten vallen. De plek in de bucket kan natuurlijk wel verschillen als er al collisions zijn.
Het gaat om deze pseudo code (generic data en methods etc even weggehaald):
Java:
1
2
3
4
5
6
| // Change every 3 in the map into a 4 for ( Map.Entry entry : myMap.entrySet ) { if (myMap.key == 3 ) { map.add(myMap.key, 4); } } |
Als ik dit test met een groot aantal waardes komt er nooit een ConcurrentModificationException, maar dat zegt natuurlijk niets over het feit of dit stukje code theoretisch unsafe is.
Wat denken jullie?
It's shocking to find how many people do not believe they can learn, and how many more believe learning to be difficult.