HashMap 的共有三個構造方法,源碼如下:
```java
public HashMap() {
this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted
}
public HashMap(int initialCapacity) {
this(initialCapacity, DEFAULT_LOAD_FACTOR);
}
public HashMap(int initialCapacity, float loadFactor) {
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal initial capacity: " +
initialCapacity);
if (initialCapacity > MAXIMUM_CAPACITY)
initialCapacity = MAXIMUM_CAPACITY;
if (loadFactor <= 0 || Float.isNaN(loadFactor))
throw new IllegalArgumentException("Illegal load factor: " +
loadFactor);
this.loadFactor = loadFactor;
this.threshold = tableSizeFor(initialCapacity);
}
```
初看源碼,可以發現,被 final 修飾的 loadFactor 一定會在構造方法中被初始化。
帶參構造方法主要做的就是對 initialCapacity 和 loadFactor 的校驗工作,并且會通過 tableSizeFor 方法計算其合理的初始容量,由于此時 table 數組尚未實例化,所以該合理的初始容量被暫存在 threshold 屬性中,由其代為保管。