ConcurrentHashMap HashMap HashTable區(qū)別

ConcurrentHashMap? ? HashMap? HashTable

HashTable 比HashMap低 ?因為線程安全 ?要比較同步鎖


HashTable ? 1丶是一個包含單向鏈的二維數(shù)組,table數(shù)組中是entry《K,V》存儲,entry對象

? ? ? ? ? ? ? ? ? ? ?2丶Values不能為空

? ? ? ? ? ? ? ? ? ? 3丶 線程安全 ? ?所有的方法均包含 synchronized 修飾

HashMap ?1 ? 相當于Hashtable升級版

? ? ? ? ? ? ? ? ? ? 2 ? ? 可以放入空值

? ? ? ? ? ? ? ? ? ?3 ? ? ? ?基于Hash表(根據(jù)關(guān)鍵碼值直接進行訪問數(shù)據(jù)結(jié)構(gòu) ) ?

? ? ? ? ? ? ? ? ? ? 4 ? ? 線程不安全

ConCurrentHashMap : ? synchronized 是針對整張Hash表,即每次鎖住整張表讓線程獨占,線程安全的背后是巨大的浪費

TreeMap ?1 ?有序的存儲

? ? ? ? ? ? ? ? 2? 自己可以排序? ? 讓key值 的類? 實現(xiàn)comparable接口


為什么我們需要ConcurrentHashMap和CopyOnWriteArrayList

同步的集合類(Hashtable和Vector)

同步的封裝類(使用Collections.synchronizedMap()方法和Collections.synchronizedList()方法返回的對象)可以創(chuàng)建出線程安全的Map和List



ConcurrentHashMap和Hashtable的區(qū)別

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容