5

Ok, here is the bit I do not understand.
If you attempt to retrieve an object using the get() method and null is returned, it is still possible that null may be stored as the object associated with the key you supplied to the get() method. You can determine if this is the case by passing your key of the object to containsKey() method for map. This returns true if key is stored in the map
So, how is containsKey() supposed to tell me if the value associated with the key supplied is null?
This is the reference if you wanna check. Page 553

A User
  • 375
  • 2
  • 4
  • 13

4 Answers4

9
Map<String, Object> map = new HashMap<String, Object>();
map.put("Foo", null);
System.out.println(map.containsKey("Foo"));
System.out.println(map.containsKey("Boo"));

OUTPUT:

true
false

get() returns null in two cases:

  • The key does not exist in the map.
  • The key does exist but the associated value is null.

You can't tell from get() which is true. However, containsKey() will tell you if the key was present in the map, regardless of whether its associated value was null.

Eng.Fouad
  • 115,165
  • 71
  • 313
  • 417
4

Consider this simple snippet of code:

Map<String, String> m = new HashMap<String, String>();
m.put("key1", "value1");
m.put("key2", null);

System.out.println("m.get(\"key1\")=" + m.get("key1"));
System.out.println("m.containsKey(\"key1\")=" + m.containsKey("key1"));

System.out.println("m.get(\"key2\")=" + m.get("key2"));
System.out.println("m.containsKey(\"key2\")=" + m.containsKey("key2"));

System.out.println("m.get(\"key3\")=" + m.get("key3"));
System.out.println("m.containsKey(\"key3\")=" + m.containsKey("key3"));

As you can see I put in the map two values, one of which is null. Thene i asked the map for three values: two of them are present (one is null), one is not. Look at the result:

m.get("key1")=value1
m.containsKey("key1")=true
m.get("key2")=null
m.containsKey("key2")=true
m.get("key3")=null
m.containsKey("key3")=false

The second and the third are the tricky part. key2 is present with null value so, using get() you cannot discriminate whether the element is not in the map or is in the map with a null value. But, using containsKey() you can, as it returns a boolean.

loscuropresagio
  • 1,922
  • 15
  • 26
  • Alright, that explained it properly. In real life programming, I will have to use `containsKey()` first to check if the key is valid and then display the value associated with it. If not then display a message or throw an exception :) – A User Jun 04 '12 at 20:07
  • @FasihKhatib that is only really necessary if you are storing `null`s in the Map. If you never store `null` in the Map, there isn't much of a point in checking for valid null mappings. – matt b Jun 04 '12 at 20:34
3
(get() == null && containsKey()) == value is null
Todd Gibson
  • 1,005
  • 7
  • 16
1

containsKey would tell you if the key is in the hashmap at all. Consider the case where a key is present with null value and the other case in which the key which you are looking for is not at all in the hashmap.

FSP
  • 4,677
  • 2
  • 19
  • 19