ConcurrentHashMap HashMap HashTable區別

weixin_34194087發表於2017-12-04

ConcurrentHashMap    HashMap  HashTable

HashTable 比HashMap低  因為執行緒安全  要比較同步鎖


HashTable   1丶是一個包含單向鏈的二維陣列,table陣列中是entry《K,V》儲存,entry物件

                     2丶Values不能為空

                    3丶 執行緒安全    所有的方法均包含 synchronized 修飾

HashMap  1   相當於Hashtable升級版

                    2     可以放入空值

                   3        基於Hash表(根據關鍵碼值直接進行訪問資料結構 )  

                    4     執行緒不安全

ConCurrentHashMap :   synchronized 是針對整張Hash表,即每次鎖住整張表讓執行緒獨佔,執行緒安全的背後是巨大的浪費

TreeMap  1  有序的儲存

                2  自己可以排序    讓key值 的類  實現comparable介面


為什麼我們需要ConcurrentHashMap和CopyOnWriteArrayList

同步的集合類(Hashtable和Vector)

同步的封裝類(使用Collections.synchronizedMap()方法和Collections.synchronizedList()方法返回的物件)可以建立出執行緒安全的Map和List



ConcurrentHashMap和Hashtable的區別

Hashtable的大小增加到一定的時候,效能會急劇下降,因為迭代時需要被鎖定很長的時間。因為ConcurrentHashMap引入了分割(segmentation),不論它變得多麼大,僅僅需要鎖定map的某個部分,而其它的執行緒不需要等到迭代完成才能訪問map。簡而言之,在迭代的過程中,ConcurrentHashMap僅僅鎖定map的某個部分,而Hashtable則會鎖定整個map

相關文章