最近在看HashMap的源碼,有不少概念都很模糊,今天寫了一個測試例子,加深對這幾個概念的理解,並演示了擴容及樹化的過程(見下篇博文:)。
注:本文基於JDK 1.8
java
約定前面的數組結構的每個格格稱爲桶
約定桶後面存放的每個數據稱爲bin
bin這個術語來自於JDK 1.8的HashMap註釋。數組
size表示HashMap中存放KV的數量(爲鏈表和樹中的KV的總和)。測試
capacity譯爲容量。capacity就是指HashMap中桶的數量。默認值爲16。通常第一次擴容時會擴容到64,以後好像是2倍。總之,容量都是2的冪。spa
/** * The default initial capacity - MUST be a power of two. */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
loadFactor譯爲裝載因子。裝載因子用來衡量HashMap滿的程度。loadFactor的默認值爲0.75f。計算HashMap的實時裝載因子的方法爲:size/capacity,而不是佔用桶的數量去除以capacity。.net
/** * The load factor used when none specified in constructor. */ static final float DEFAULT_LOAD_FACTOR = 0.75f;
threshold表示當HashMap的size大於threshold時會執行resize操做。
threshold=capacity*loadFactor3d
/** * The next size value at which to resize (capacity * load factor). */ int threshold;
這篇博文討論了HashMap的一些基本概念,如capacity、loadFactor、threshold、size等,下篇博文 HashMap的擴容及樹化過程 根據示例,討論下擴容和樹化的過程。code
轉自 https://blog.csdn.net/fan2012huan/article/details/51087722blog