之前面試的時候有問過map中的key和value值是否能爲空的問題,我當時想,value爲空還有可能,那key還能爲空嗎?key爲空那還有什麼意義呢,但事實不是這樣。至於部分map的key爲什麼能爲空,可以再深入思考。
Map | Key | Value | Super | JDK | DESC |
HashTable | 不允許爲null | 不允許爲null | Dictionary | 1.0 | 線程安全(過時) |
ConCurrentHshMap | 不允許爲null | 不允許爲null | AbstractMap | 1.5 | 鎖分段技術或CAS(JDK8以上) |
TreeMap | 不允許爲null | 允許爲null | AbstractMap | 1.2 | 線程不安全(有序) |
HashMap | 允許爲null | 允許爲null | AbstractMap | 1.2 | 線程不安全(resize死鏈問題) |
注:雖然部分map的key值是可以置入null,但實際開發中,很大機率會在調用過程中報異常,在線程中,子線程異常不會拋給主線程,因此在排查問題時會很繁瑣,值得注意。