前言:
记得初学 Java Collections Framework时,每次需要记一些如Hashtable不能存储null,HashMap能存储,还有List和Set能不能存储null,这在我初学阶段都是得死记硬背的,最近看了下集合框架的一些源码加上网上各路大神的看法,所以总结了下,如有误,请及时指正。
看看Map
看看HashMap的put方法
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
这里put时需要计算hash()方法,当key为null时,hash()直接返回0,不会调用key。hashCode()方法。不会产生空指针报错。不过HashMap的key只能存储一个null,因为key是不能重复的,所以有且只能有一个null。
注意:HashMap 允许有一个 Node 的 Key 为 null,该 Node 一定会放在第 0 个桶的位置,因为这个 Key 无法计算 hashCode(),因此只能规定一个桶让它存放。
下面看看Hashtable
public synchronized V put(K key, V value