java面試考點-HashTable/HashMap/ConcurrentHashMap
HashTable
- 內部數據結構是數組+鏈表,鍵值對不容許爲null,線程安全,可是鎖是整表鎖,性能較差/效率低
HashMap
- 結構同HashTable,鍵值對容許爲null,線程不安全,
- 默認初始大小爲16(固定爲2的冪次方),
- 默認擴容閥值爲0.75,擴容方式爲,先插入再擴容,因此會產生無效擴容,
- 單個鏈表長度默認爲8,當超過期鏈表自動轉爲紅黑樹結構,當樹結構長度小於6時,從新轉爲鏈表
ConcurrentHashMap
- jdk1.5以後對HashTable的升級版,性能效率各方面都有巨大的提高,
- 在1.5-1.7版本中使用segment做爲分割單元,操做過程當中會鎖住segment,默認初始爲16個segment,採用的是可重入鎖ReentrantLock
- 在1.8以後放棄segment,採用與HashMap相同的數據結構,Node,採用CAS機制相似樂觀鎖,使用3個CAS操做來確保node的一些操做的原子性,這種方式代替了鎖,減少了鎖的粒度,來加強併發性能
歡迎關注本站公眾號,獲取更多信息