Hi

As the topic asks, should calling computeIfAbsent on a HashMap with an existing 
key be a structural modification?

The documentation for HashMap has the following note regarding concurrency:
A structural modification is any operation that adds or deletes one or more 
mappings; merely changing the value associated with a key that an instance 
already contains is not a structural modification.

Especially the last part there makes me argue that computeIfAbsent with an 
existing key should NOT be a structural modification -- especially considering 
the equivalent call to HashMap::put is not.

Yet, it currently can be, as computeIfAbsent might resize the underlying table 
_before_ checking if the key is present.
(computeIfAbsent has if (size > threshold) resize() in the beginning, vs putVal 
having it at the end, after the key has been added).

So if HashMap::computeIfAbsent with an existing key should not be a structural 
modification, the current implementation is bugged.

Kind regards
Michael Rasmussen

Reply via email to