爪哇的一些字典是否可以儲存 null?
今天我就用 HashMap、Hashtable、ConcurrentHashMap、TreeMap 這幾種開發中常用資料結構來測試下。
結論在前
其實大家去看下原始碼測試下就可以得到以下結論:
HashMap key 和 value 都可以為空
Hashtable key 和 value 都不能為空
ConcurrentHashMap key 和 value 都不能為空
TreeMap key不能為 null,value 可以為空
為空時丟擲的都是 NPE (NullPointException)
HashMap
測試程式碼
Map
輸出
null{null=null}複製程式碼
結論
hashMap key 可以 儲存 null, value 也可以 儲存 null
Hashtable
測試程式碼
Hashtable
輸出
測試 hashtable。put(null, “”);輸出
測試 hashtable。put(null, null);輸出
原因
測試 key是否為空,put 方法中獲取 null 的 hashCode方法,會丟擲NPE
測試 value是否可以為空,put方法裡會有判斷
ConcurrentHashMap
ConcurrentHashMap
結果
結論
key 和 value 都不能為空
原因
ConcurrentHashMap的put方法中有判斷
TreeMap
測試程式碼
TreeMap
輸出
原因
用預設的比較方式比較key,所以key不能為 null
但是儲存 value 可以為 null
結論
key不能為 null,value 可以為 null
結論在後
HashMap key 和 value 都可以為空
Hashtable key 和 value 都不能為空
ConcurrentHashMap key 和 value 都不能為空
TreeMap key不能為 null,value 可以為空
為空時丟擲的都是 NPE (NullPointException)
作者:iuuuuuaena
連結:https://juejin。cn/post/7043278442644635679
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。