Java面試必問之Hashmap底層實現原理(JDK1.7)
阿新 • • 發佈:2020-03-05
# 1. 前言
Hashmap可以說是Java面試必問的,一般的面試題會問:
* Hashmap有哪些特性?
* Hashmap底層實現原理(get\put\resize)
* Hashmap怎麼解決hash衝突?
* Hashmap是執行緒安全的嗎?
* ...
今天就從原始碼角度一探究竟。筆者的原始碼是OpenJDK1.7
# 2. 構造方法
首先看構造方法的原始碼
```java
// 預設初始容量
static final int DEFAULT_INITIAL_CAPACITY = 16;
// 預設負載因子
static final float DEFAULT_LOAD_FACTOR = 0.75f;
// 陣列, 該資料不參與序列化
transient Entry[] table;
public HashMap() {
this.loadFactor = DEFAULT_LOAD_FACTOR;
// 初始容量16,擴容因子0.75,擴容臨界值12
threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR);
// 基礎結構為Entry陣列
table = new Entry[DEFAULT_INITIAL_CAPACITY];
init();
}
```
由以上原始碼可知,Hashmap的初始容量預設是16, 底層儲存結構是陣列(到這裡只能看出是陣列, 其實還有連結串列,下邊看原始碼解釋)。基本儲存單元是Entry,那Entry是什麼呢?我們接著看Entry相關原始碼,
```java
static cla