HashMap源碼解析——關鍵屬性

HashMap類中的一些關鍵屬性:

ttransient Node<K,V>[] table;//存儲元素的實體數組
transient int size;//存放元素的個數
int threshold; //臨界值   當實際大小超過臨界值時,會進行擴容threshold = 加載因子*容量
final float loadFactor; //加載因子
transient int modCount;//被修改的次數

其中loadFactor加載因子是表示Hsah表中元素的填充的程度.

若:加載因子越大,填滿的元素越多,好處是,空間利用率高了,但:衝突的機會加大了.鏈表長度會越來越長,查找效率降低。

反之,加載因子越小,填滿的元素越少,好處是:衝突的機會減小了,但:空間浪費多了.表中的數據將過於稀疏(很多空間還沒用,就開始擴容了)

衝突的機會越大,則查找的成本越高.

因此,必須在 “衝突的機會”與”空間利用率”之間尋找一種平衡. 這種平衡本質上是數據結構中有名的”時-空”矛盾的平衡.

  如果機器內存足夠,並且想要提高查詢速度的話可以將加載因子設置小一點;相反如果機器內存緊張,並且對查詢速度沒有什麼要求的話可以將加載因子設置大一點。不過一般我們都不用去設置它,讓它取默認值0.75就好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章