```java
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
```
默認的 table 容量,1<<4 = 2^4 = 16,規定必須是2的冪。
```java
static final int MAXIMUM_CAPACITY = 1 << 30;
```
最大的 table 容量,規定必須是 2 的冪,類型為 int,掐指一算,那只能是 0100 0000 0000 0000 0000 0000 0000 0000。因為 Java中 int 有 32 位,除第 1 位符號位外,數值部分只有 31 位,只有 1<<30 滿足條件。
> 這里需要說明一下,對于 2 的冪,在計算機的世界里是一群特殊的存在,它們的二進制中只有一個1,其余位全為 0 。這個特性會影響與它進行位運算后的結果具有一些特殊效果。
```java
static final float DEFAULT_LOAD_FACTOR = 0.75f;
```
構造函數中未指定時使用的負載因子。
```java
static final int TREEIFY_THRESHOLD = 8;
```
相信很多人知道鏈表長度大于 8 會轉為紅黑樹,依據也就是這個字段的注釋說明。但其實這只是條件之一,另一個條件就是下面這個參數。
```java
static final int MIN_TREEIFY_CAPACITY = 64;
```
在進行鏈表轉紅黑樹的時候,第一步是檢查鏈表的長度是否大于等于 8,第二步會檢查 table 數組的容量是否小于此數值,若小于,則取消轉為紅黑樹,只對 table 數組進行擴容。
```java
static final int UNTREEIFY_THRESHOLD = 6;
```
當鍵值對數量過多時需要對 table 數組進行擴容,并且將每個鍵值對放到新的桶中(或者不變)。原來的桶的內部結構有可能是鏈表,也有可能是紅黑樹,經過一番洗牌之后,如果桶結構為紅黑樹的鍵值對數量過低,就會重新轉變為鏈表。低到哪個程度呢?就是這個字段對應的大小。