HashMap ConcurrentHashMap HashTable synchronizedMap
1.HashMap與HashTable:
HashMap 非線程安全,支持null key 和null 值。 而HashTable線程安全,不支持null key和null 值。 HashMap 可以很容易轉換到LinkedHashMap(支持插入有序,設置,訪問,刪除有序,而TreeMap支持對Key有序,TreeMap實則爲紅黑樹), 而HashTable不能。
2.ConcurrentHashMap:
在併發環境下,ConcurrentHashMap弱化了size(), isEmpty()函數的語義,加強了get, put, containsKey, remove等操作的性能。即size, isEmpty返回的值可能已經過期,它實際上只是一個估計值,並不是一個精確值。雖然看上去這很不靠譜,但在併發環境下,這兩個方法的用處很小,因爲他們的返回值總在不斷變化。
使用ConcurrentHashMap的話,不要通過synchronize該對象來創建新的原子操作。因爲ConcurrentHashMap的加鎖粒度要小很多,並非是鎖整個對象,你把整個對象鎖住了,辛辛苦苦寫細粒度鎖的author會打死你的,想通過簡單的鎖整個對象來創建新的原子操作,可以瞭解一下Collections.synchronizedMap()。