HashMap、Hashtable、LinkedHashMap、TreeMap、ConcurrentHashMap之間的區別-yellowcong
阿新 • • 發佈:2019-01-26
這些Map集合在面試中,經常會被問道和考到,所以總結一下,HashMap和Hashtable的區別在於1、多執行緒;2、主鍵是否為空;3、繼承的父類
通過Collections.synchronizedMap()的方法,將Map集合變成執行緒安全的。
1 HashMap和Hashtable的區別
這個問題,可能和String與StringBuffer,StringBuilder一樣經常被人問道,這個問題的標準答案,基本上是三點,
No | HashMap | HashTable |
---|---|---|
1 | 繼承的是AbstractMap類 | 繼承的的是Dicionary類 |
2 | 非執行緒安全 | 執行緒安全 |
3 | 允許存在null的key | 不允許存在空key |
1.1 繼承的父類
HashMap繼承的是AbstractMap類
Hashtable繼承的的是Dicionary類
1.2 執行緒安全
HashMap是非執行緒安全的(效率比較的高)
Hashtable是執行緒安全的(效率相對比較低)
1.3 Key值是否可以存在null
HashMap可以允許為空
大家可以發現如果是空的key ,先判斷一下HashMap的第一個Bucket,也就是第一個Entry<K,V>
(HashMap和Hashtable中,都維護的是一個Entry<K,V>[]
Hashtable是不允許存在空的key
2、LinkedHashMap
基於連結串列的資料結構
LinkedHashMap繼承了HashMap,實現了Map介面
3、TreeMap
基於Tree 資料結構的集合
4、ConcurrentHashMap
這個是無鎖多執行緒程式設計所提供的一個集合組合,是基於cpu層面的CAS原子操作,用到這個操作,只需要在取佇列元素和新增佇列元素的時候利用CAS原子操作,就可以保證多個執行緒對佇列元素的有序存取