为什么ConcurrentHashMap的key和value不能为null,map的null值处理有何限制?

2026-04-19 17:491阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计570个文字,预计阅读时间需要3分钟。

为什么ConcurrentHashMap的key和value不能为null,map的null值处理有何限制?

源码中,如果`key`或`value`为`null`,则抛出`NullPointerException`。特性上,即使`ConcurrentHashMap`也可以存储`value`为`null`的值。不论使用`HashMap`还是`ConcurrentHashMap`,调用`map.get(key)`时,如果返回了`null`,则表示那么。

源码

if (key == null || value == null) throw new NullPointerException();

二义性

假定ConcurrentHashMap也可以存放value为null的值。那不管是HashMap还是ConcurrentHashMap调用map.get(key)的时候,如果返回了null,那么这个null,

都有两重含义:

1.这个key从来没有在map中映射过。

2.这个key的value在设置的时候,就是null。

为什么map允许value=null

对于HashMap的正确使用场景是在单线程下使用。

在单线程中,当我们得到的value是null的时候,我可以用hashMap.containsKey(key)方法来区分上面说的两重含义。

所以当map.get(key)返回的值是null,在HashMap中虽然存在二义性,但是结合containsKey方法可以避免二义性。

为什么ConcurrentHashMap不允许

ConcurrentHashMap的使用场景为多线程。

阅读全文
标签:keyva

本文共计570个文字,预计阅读时间需要3分钟。

为什么ConcurrentHashMap的key和value不能为null,map的null值处理有何限制?

源码中,如果`key`或`value`为`null`,则抛出`NullPointerException`。特性上,即使`ConcurrentHashMap`也可以存储`value`为`null`的值。不论使用`HashMap`还是`ConcurrentHashMap`,调用`map.get(key)`时,如果返回了`null`,则表示那么。

源码

if (key == null || value == null) throw new NullPointerException();

二义性

假定ConcurrentHashMap也可以存放value为null的值。那不管是HashMap还是ConcurrentHashMap调用map.get(key)的时候,如果返回了null,那么这个null,

都有两重含义:

1.这个key从来没有在map中映射过。

2.这个key的value在设置的时候,就是null。

为什么map允许value=null

对于HashMap的正确使用场景是在单线程下使用。

在单线程中,当我们得到的value是null的时候,我可以用hashMap.containsKey(key)方法来区分上面说的两重含义。

所以当map.get(key)返回的值是null,在HashMap中虽然存在二义性,但是结合containsKey方法可以避免二义性。

为什么ConcurrentHashMap不允许

ConcurrentHashMap的使用场景为多线程。

阅读全文
标签:keyva