Erik Madsen Erik Madsen - 5 months ago 20
Java Question

Is using java Map.containsKey() redundant when using map.get()

I have been wondering for some time whether it is allowable within best practice to refrain from using the

containsKey()
method on
java.util.Map
and instead do a null check on the result from
get()
.

My rationale is that it seems redundant to do the lookup of the value twice - first for the
containsKey()
and then again for
get()
.

On the other hand it may be that most standard implementations of
Map
cache the last lookup or that the compiler can otherwise do away with the redundancy, and that for readability of the code it is preferable to maintain the
containsKey()
part.

I would much appreciate your comments.

Answer

Some Map implementations are allowed to have null values, eg HashMap, in this case if get(key) returns null it does not guarantee that there is no entry in the map associated with this key.

So if you want to know if a map contains a key use Map.containsKey. If you simply need a value mapped to a key use Map.get(key). Map.containsKey will be useless and will affect performance. Moreover, in case of concurrent access to a map (eg ConcurrentHashMap), after you tested Map.containsKey(key) there is chance that the entry will removed by another thread before you call Map.get(key).

Comments