为什么ConcurrentHashMap不能存null key和null value?

ConcurrentHashMap是J.U.C包下著名的线程安全类。通常作为高并发情境下HashMap的替代工具。

我们都知道HashMap是支持Null Key 和 Null Value的,当遇到Null Key时,我们会将它hash到HashMap的内部Table[]的第0个位置去。

但是ConcurrentHashMap不允许使用Null Key和Null Value,如果遇到会直接抛出NullPointException,这样设计是为什么呢?

首先,很多开发者认为,null是一个非常不好的设计,他应该只被用来表示未初始化的引用类型;

再者,在并发中,null是一个非常严重的问题,高并发下,尽可能地消除歧义是必要的,你需要知道究竟是没有找到,还是它的值为null;

对于key不为null的设置,我个人倾向于这是一种开发规范的问题,一家人就要整整齐齐,你就和value一起别为null了。

并且null的使用需要谨慎,所以尽可能地防范于未然,也是api设计者需要考虑的问题。

原文地址:https://www.cnblogs.com/hekiraku/p/12193326.html