
目录一. 常见常用的 Map 集合有哪些二. HashMap 的KV都能为空值三. ConcurrentHashMap 的KV都不能为空四. TreeMap 的K不能为空V能为空五. Hashtable 的KV都不能为空六. 总结一. 常见常用的 Map 集合有哪些Java 中常用到的 Map 集合有 HashMapConcurrentHashMapTreeMapHashTable。在这四个之中HashMap和TreeMap 是线程不安全的ConcurrentHashMap和HashTable是线程安全的二. HashMap 的KV都能为空值如下图所示HashMap 在存放元素之前会先计算元素Key的哈希值在哈希方法在添加了三元运算如果Key null那么就会把该元素存放在在数组的头部即0索引处的位置。三. ConcurrentHashMap 的KV都不能为空原因我们看源码也可以得知ConcurrentHashMap 存放元素之前先对元素的KV做判断如果KV其中任意一个为空都会抛出 NullPointException 空指针异常。四. TreeMap 的K不能为空V能为空TreeMap 的源码这里它对 key 做了非空判断如果 key 为空则抛出空指针异常。五. Hashtable 的KV都不能为空看Hashtable 的源码在进行 put 元素操作的时候对 value 做非空判断如果 V 为空则抛出 NullPointExcption 空指针异常。在计算 key 的哈希值时若 key 也为空空调用哈希运算也会 NullPointExcption 空指针异常。六. 总结总结上面四种情况可以得出如下表图