总结 Map 集合哪些 K/V 可以为空?哪些不可以为空?原因是什么?

目录

1. 常见常用的 Map 集合有哪些?

2. HashMap 的KV都可以为空值

3. ConcurrentHashMap 的KV都不可以为空

4. TreeMap 的K不可以为空,V可以为空

5. Hashtable 的K可以为空,V不能为空

6. 总结


1. 常见常用的 Map 集合有哪些?

Java 中常用到的 Map 集合有 HashMap,ConcurrentHashMap,TreeMap,HashTable。

在这四个之中,HashMap和TreeMap 是线程不安全的;ConcurrentHashMap和HashTable是线程安全的;

2. HashMap 的KV都可以为空值

如下图所示,HashMap 在存放元素之前会先计算元素Key的哈希值,在哈希方法在添加了三元运算,如果Key == null,那么就会把该元素存放在在数组的头部,即0索引处的位置。

总结 Map 集合哪些 K/V 可以为空?哪些不可以为空?原因是什么?_第1张图片

3. ConcurrentHashMap 的KV都不可以为空

原因我们看源码也可以得知,ConcurrentHashMap 存放元素之前先对元素的KV做判断,如果KV其中任意一个为空,都会抛出 NullPointException 空指针异常。

总结 Map 集合哪些 K/V 可以为空?哪些不可以为空?原因是什么?_第2张图片

4. TreeMap 的K不可以为空,V可以为空

观看 TreeMap 的源码,这里它对 key 做了非空判断,如果 key 为空,则抛出空指针异常。

总结 Map 集合哪些 K/V 可以为空?哪些不可以为空?原因是什么?_第3张图片

5. Hashtable 的K可以为空,V不能为空

依旧是看Hashtable 的源码,在进行 put 元素操作的时候,对 value 做非空判断,如果 V 为空,则抛出 NullPointExcption 空指针异常。

在计算 key 的哈希值时,若 key 也为空,空调用哈希运算也会空指针异常。

总结 Map 集合哪些 K/V 可以为空?哪些不可以为空?原因是什么?_第4张图片

6. 总结

总结上面四种情况,可以得出如下表图

总结 Map 集合哪些 K/V 可以为空?哪些不可以为空?原因是什么?_第5张图片

你可能感兴趣的:(java,开发语言)