Since equals() and hashCode() are
used to store and retrieve values, how does it work in case of null key?
Null key is handled
specially in HashMap, there are two separate method for that putForNullKey(V
value) and getForNullKey(). Later is offloaded version of get() to look up null
keys.
Null keys always map to index 0.
Null keys always map to index 0.
This null case is
split out into separate methods for the sake of performance in the two most
commonly used operations (get and put), but incorporated with conditionals in
others.
In short, equals() and hashcode() method are not used in case of null keys in
HashMap, here is how nulls are retrieved from HashMap.
private V getForNullKey()
{
for (Entry<K,V>
e = table[0]; e != null; e = e.next) {
if (e.key == null)
return e.value;
}
return null;
}
/**
* Offloaded version
of put for null keys
*/
private V putForNullKey(V
value) {
for (Entry<K,V>
e = table[0]; e != null; e = e.next) {
if (e.key == null) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(0, null, value, 0);
return null;
}
No comments:
Post a Comment