Java HashMap與Hashtable數據結構和特點+HashSet簡述
1.HashMap
HashMap就是基于數組和鏈表的數據結構:JDK1.7使用 數組+單向鏈表;JDK1.8使用 數組+單向鏈表+紅黑樹
HashMap有兩個重要的參數:
一個是負載因子 0.75:表示數組使用率達到75%,并且數組長度大于64,擴容數組
一個是初始值大小 16:表示數組的長度
特點:HashMap線程不安全,允許賦值為null, 初始數組長度16 擴容2倍
面試題:描述HashMap數據結構
- 構成:數組+單向鏈表+紅黑樹
- 數組存放的過程:根據key的hash值經過經過計算(取余)得出當前元素應該存放在數組中的位置,如果當前位置有值,利用單向鏈表向下延伸
- 延伸為單項鏈表,因為單向鏈表的查詢效率會隨著元素的增多而大幅度下降,所以在JDK1.8之后中加入了紅黑樹
- 當單向鏈表的長度超過8 ,并且集合中的元素個數大于64 ,單向鏈表轉換為紅黑樹,如果數中的元素在后續減少到了6個,則繼續轉換為單向鏈表
2.Hashtable
特點:Hashtable線程安全,不允許賦值為null,數組初始為11 擴容2倍+1 JDK1.0就存在
其余與HashMap相同
3.HashSet
HashSet底層使用的是HashMap :因為HashSet中存儲的元素與HashMap中存儲的鍵(key)值 特點一致
特點:無序、無下標、不能重復、線程不安全、允許為null