首先hashmap可以插入null值,但是hashtable和hashcurrentHashmap是不支持的;这是因为在 hashmap对插入key为null进行了特殊处理,当插入的值为null的时候会将哈希值设置为0
但是hashtable会直接抛出异常:
并且hashmap是线程不安全的,所以在单线程环境运行的,如果查询null值的key的时候,可以通过containsKey来查询这个值是否是真的存在,如果是存在就可以就会返回true就可以知道,在哈希表中是否真正的纯在这个值
但是hashtable是线程安全的,在并发的环境之下,假设可以插入null值,但是在使用containsKey的时候就不清楚,这个值是不是其他线程刚刚插入的,所以即使containsKey返回值是true但是也无法判断是否存在null值在哈希表中,所以就会产生二义性,为了避免这种情况hashtable在源码中如果插入的值是null的时候就会直接抛出空指针异常