HashMap初始化的四種構造方法


一、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);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM