一、HashMap()
使用默認初始容量16與默認負載因子0.75構造一個空的HashMap。
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; static final float DEFAULT_LOAD_FACTOR = 0.75f; public HashMap() { this.loadFactor = DEFAULT_LOAD_FACTOR; }
二、HashMap(int initialCapacity, float loadFactor)
傳入初始容量和負載因子來構造一個空的HashMap。
static final int MAXIMUM_CAPACITY = 1 << 30; /** * 當map容量達到這個閾值的時候,需要進行resize。 */ int threshold; public HashMap(int initialCapacity, float loadFactor) { // 初始容量不能小於0 if (initialCapacity < 0) throw new IllegalArgumentException("Illegal initial capacity: " + initialCapacity); // 初始容量不能大於MAXIMUM_CAPACITY if (initialCapacity > MAXIMUM_CAPACITY) initialCapacity = MAXIMUM_CAPACITY; // 校驗負載因子合法性 if (loadFactor <= 0 || Float.isNaN(loadFactor)) throw new IllegalArgumentException("Illegal load factor: " + loadFactor); this.loadFactor = loadFactor; // 計算下次resize的閾值 this.threshold = tableSizeFor(initialCapacity); }
由於HashMap的容量必須為2的冪次方,且int類型的范圍為-2^32 ~ 2^32-1,所以MAXIMUM_CAPACITY為int類型中為2的冪次方且最大的值。
三、HashMap(int initialCapacity)
傳入初始容量,通過默認負載因子構造一個空的HashMap,調用了HashMap(int initialCapacity, float loadFactor)構造方法。
public HashMap(int initialCapacity) { this(initialCapacity, DEFAULT_LOAD_FACTOR); }
四、HashMap(Map<? extends K, ? extends V> m)
根據已有的Map接口創建一個元素相同的HashMap,使用默認初始容量與默認負載因子。
public HashMap(Map<? extends K, ? extends V> m) { this.loadFactor = DEFAULT_LOAD_FACTOR; putMapEntries(m, false); }
