一、導入語

HashMap是我們最常見也是最長使用的數據結構之一,它的功能強大、用處廣泛。而且也是面試常見的考查知識點。常見問題可能有HashMap存儲結構是什么樣的?HashMap如何放入鍵值對、如何獲取鍵值對應的值以及如何刪除一個鍵值對。今天我們就來看看HashMap底層的實現原理。下面我們就開始進入正題,分析一下hashmap源碼的實現原理。

二、HashMap構造方法以及存儲結構

public HashMap() {    this.loadFactor = DEFAULT_LOAD_FACTOR;
    threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR);
    table = new Entry[DEFAULT_INITIAL_CAPACITY];    init();
}

HashMap的構造方法有好幾個,在這里我們就不一一介紹,只說一下我們最常見的HashMap無參構造方法。上面的構造方法中,有幾個變量需要我們這里說明一下:

  1. loadFactor:加載因子,默認值為0.75;

  2. threshold:threshold是一個閾值,初始值為默認為16*0.75。當hashmap中存放鍵值對數量大于該值時,表示hashmap容量大小需要擴充,一般容量會翻倍。

  3. table:table其實是一個Entry類型的數組,在hashmap中我們利用數組和鏈表來解決hash沖突,這里的table數組用于存放沖突鏈表的頭結點。

另外在HahsMap中,我們通過數組加鏈表的方式來存儲Entry節(jié)點(Entry數據結構用于存儲鍵值對)。這里所謂的數組即是上面提到的table,它是一個Entry數組,table對象中節(jié)點初始化值均為null,當我們新插入的節(jié)點第一次散列到該位置時,會將節(jié)點插入到table中對應位置。如果后續(xù)存在散列位置相同的節(jié)點,會以鏈表的方式解決hash沖突。示意圖如下:
seo優(yōu)化培訓,網絡推廣培訓,網絡營銷培訓,SEM培訓,網絡優(yōu)化,在線營銷培訓

網友評論