1. 程式人生 > >Java中關於Map的使用(HashMap、ConcurrentHashMap)

Java中關於Map的使用(HashMap、ConcurrentHashMap)

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)