Java中關於Map的使用(HashMap、ConcurrentHashMap)
阿新 • • 發佈:2019-04-28
get java 多線程 tree ict per The name user
時就容易拋出空指針異常,需要做的就是在進行
在日常開發中Map可能是Java集合框架中最常用的一個類了,當我們常規使用HashMap時可能會經常看到以下這種代碼:
Map<Integer, String> hashMap = new HashMap<>();
hashMap.put(user.getId,user.getUsername);
似乎看起來並沒有什麽問題,但當你用到多線程的場景時,HashMap
必然是線程不安全的,為了更高的支持高並發,JDK1.5以後Java提供了一個線程安全的HashMap
,即ConcurrentHashMap
,但這也在使用中提供了一個坑,它與HashMap
在使用上最淺顯的不同是,前者不支持空字段存儲,所以當你再使用一下代碼去使用ConcurrentHashMap
put()
操作之前先對對象進行字段是否為空的判斷。
在Map中關於K/V是否為空的說明如下
集合類 | Key | Value | Super | 說明 |
---|---|---|---|---|
Hashtable | 不允許為 null | 不允許為 null | Dictionary | 線程安全 |
ConcurrentHashMap | 不允許為 null | 不允許為 null | AbstractMap | 分段鎖技術 |
TreeMap | 不允許為 null | 允許為 null | AbstractMap | 線程不安全 |
HashMap | 允許為 null | 允許為 null | AbstractMap | 線程不安全 |
Java中關於Map的使用(HashMap、ConcurrentHashMap)