为什么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设计者需要考虑的问题。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM