HashMap中capacity、loadFactor、threshold、size等概念的解釋<轉>

最近在看HashMap的源碼,有不少概念都很模糊,今天寫了一個測試例子,加深對這幾個概念的理解,並演示了擴容及樹化的過程(見下篇博文:)。 
注:本文基於JDK 1.8 
這裏寫圖片描述java

HashMap的結構

這裏寫圖片描述

約定

約定前面的數組結構的每個格格稱爲桶 
約定桶後面存放的每個數據稱爲bin 
bin這個術語來自於JDK 1.8的HashMap註釋。數組

size

size表示HashMap中存放KV的數量(爲鏈表和樹中的KV的總和)。測試

capacity

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
  • 1
  • 2
  • 3
  • 4

loadFactor

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;
  • 1
  • 2
  • 3
  • 4

threshold

threshold表示當HashMap的size大於threshold時會執行resize操做。 
threshold=capacity*loadFactor3d

/** * The next size value at which to resize (capacity * load factor). */ int threshold;
  • 1
  • 2
  • 3
  • 4

結束語

這篇博文討論了HashMap的一些基本概念,如capacity、loadFactor、threshold、size等,下篇博文 HashMap的擴容及樹化過程 根據示例,討論下擴容和樹化的過程。code

 

轉自 https://blog.csdn.net/fan2012huan/article/details/51087722blog

相關文章
相關標籤/搜索