Understanding HashMap<K,V>
hashmap, java
Solution
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`.
Problem
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