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設計者需要考慮的問題。