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