關於HashMap,它是咱們使用很是多的集合容器,它是基於哈希表的 Map 接口的實現,以key-value的形式存在。實際上HashMap是一個「鏈表散列」,以下是它數據結構:數組
HashMap底層實現仍是數組,只是數組的每一項都是一條鏈。數據結構
在hashMap裏有兩個重要因子,初始容量(Capacity),加載因子(loadFactor)。性能
這兩個參數是影響HashMap性能的重要參數,其中容量表示哈希表中桶的數量,初始容量是建立哈希表時的容量,加載因子是哈希表在其容量自動增長以前能夠達到多滿的一種尺度(默認是0.75),它衡量的是一個散列表的空間的使用程度,加載因子越大表示散列表的裝填程度越高,反之愈小。對象
從源碼來看,能夠分爲如下步驟:blog
HashMap是一個Node類型的數組table,初始化爲Null。索引
不過,在JDK1.8後發生了變化接口
版本 | 結構 | table數據類型 | 初始容量 |
---|---|---|---|
jdk7 | 數組+鏈表 | Entry | 16 |
jdk8 | 數組+鏈表+紅黑樹 | Node | 0 |
這兩種在容量上的區別是jdk7初始化table時容量爲16(餓漢式),而jdk8建立對象時並無初始化,而是第一次添加元素時table初始化爲16(懶漢式)。ci