Check the existence of a HashMap key

42,761

Solution 1

The containsKey should be very slightly slower because it results in an extra function call (it just calls getEntry) (it could get optimised away, I'm not sure whether Java will do so). containsKey looks like:

public boolean containsKey(Object key) {
  return getEntry(key) != null;
}

But note that containsKey could on the other hand be very slightly faster on other Map implementations (but probably not those in the standard Java API).

Generally my implementations look like: (avoiding the need for containsKey)

int[] arr = map.get(100);
if (arr == null) // doesn't exist
  // do stuff
else // exists
  // do stuff with arr

The below would definitely be slower than the above: (if the items you look for exist a reasonable amount of the time)

if (!map.containsKey(100)) // doesn't exist
  // do stuff
else // exists
{
  int[] arr = map.get(100);
  // do stuff with arr
}

Edit: Thanks to zvzdhk for providing the source of containsKey. I should actually have checked.

Solution 2

Actually both approaches are the same. If you look in java.util.HashMap source code you can find next containsKey realization:

public boolean containsKey(Object key) {
    return getEntry(key) != null;
}

Solution 3

The two differs only in return type except that map.get(key) may return you null in case if its a key, however map.containsKey(key) will return you boolean which could be used to distingush the two possible cases of map.get(key) returning null.

Solution 4

There is no difference between this two approaches. The main difference only what you are going to do next. If you need the value then, of course by get you will have the value.

Share:
42,761
Sophie Sperner
Author by

Sophie Sperner

Smart & happy blond! ))))

Updated on July 10, 2022

Comments

  • Sophie Sperner
    Sophie Sperner almost 2 years

    In Java, having a HashMap fully filled in with data of such form:

    HashMap<Integer, int[]> map = new HashMap<Integer, int[]>(1000000, 1);
    

    what is faster when checking the existence of a random key, say 100:

    if (map.get(100) == null))
    

    or

    if (!map.containsKey(100))
    

    ?

    Question is interesting from the micro-optimization point of view.