1. 程式人生 > >Java面試必問之Hashmap底層實現原理(JDK1.7)

Java面試必問之Hashmap底層實現原理(JDK1.7)

# 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