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

- 375
- 2
- 4
- 13
4 Answers
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
.

- 115,165
- 71
- 313
- 417
-
which is pretty much what i said in the post above. – FSP Jun 04 '12 at 19:42
-
yeah, what the book says is that it is supposed to help me check if the V value of the HashMap
is null. – A User Jun 04 '12 at 19:42
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
.

- 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
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.

- 4,677
- 2
- 19
- 19