HashMap 學習總結

2021-07-29 21:29:45 字數 1320 閱讀 8352

本文參考見:  by: 

chenssy

知識點:

1. hashmap的三個建構函式:hashmap( )    預設初始容量為16, 預設載入因子是0.75

hashmap(int initialcapacity) 指定初始容量 但預設載入因子為0.75

hashmap(int initialcapacity, float loadfactor): 指定容量和載入因子

2. 容量 是指:雜湊表中桶(也就是entry陣列)的數量, 初始容量只是雜湊表在建立時的容量 必須為2 的冪,最大不可以超過1<<30也就是2的30次方

載入因子是指:在雜湊表的容量自動增加之前可以達到多滿的乙個尺度

如果雜湊表中的條目數 > 載入因子* 當前容量   則可以呼叫rehash將容量翻倍

這裡還有個移位運算:<< 代表向左移位。在數字沒有溢位的情況下,對於正數和負數,左移一位都相當於乘以2, 左移n位

就是相當於乘以2的n次方

3. 幾個宣告:

transient

intsize;

// 已存元素的個數

intthreshold;

// 下次擴容的臨界值,size>=threshold就會擴容

4. 資料結構:

hashmap的實現還是陣列,只是陣列的每一項都是一條鏈

初始容量就代表了該陣列的長度

static class entryimplements map.entry

.......

}

新建hashmap的時候會初始化乙個table陣列。陣列的節點為entry

其中entry為hashmap的內部類,它包含了鍵key、值value、下乙個節點next,以及hash值,這是非常重要的,正是由於entry才構成了table陣列的項為鍊錶。

5.hashmap的儲存過程:

hashmap儲存資料的過程為:首先判斷key是否為null,若為null,則直接呼叫putfornullkey方法。若不為空則先計算key的hash值,然後根據hash值搜尋在table陣列中的索引位置,如果table陣列在該位置處有元素,則通過比較是否存在相同的key,若存在則覆蓋原來key的value,否則將該元素儲存在鏈頭(最先儲存的元素放在鏈尾)。若table在該處沒有元素,則直接儲存。

使用的方法為:put(key, value)

6. 讀取的過程:

通過key的hash值找到在table陣列中的索引處的entry,然後返回該key對應的value即可。

使用的方法為:

get(key)

HashMap學習總結

答 雜湊表又稱雜湊表是一種k value鍵值對對應關係的資料結構,它通過乙個關鍵碼k,經過雜湊函式,能找到存在陣列上的記錄,查詢速度塊。答 它是底層主幹是陣列 雜湊表的主幹是陣列 陣列裡的每個元素都是煉表頭。到了jdk8,增加了紅黑樹結構,所以,總的來說陣列 鍊錶 紅黑樹。答 hashmap有雜湊表...

HashMap個人總結

1.儲存結構 內部包含了 個 entry 型別的陣列 entry table。transient entry table transient 表示不能被序列化 entry型別儲存著鍵值對。它包含了四個字段,entry 是 個鍊錶。即陣列中的每個位置被當成 個桶,個桶存放 個entry鍊錶。hashm...

HashMap知識總結

問題5 說說hashmap是如何進行擴容的可以嗎?問題6 那hashcode和equals在hashmap中是怎麼用的?jdk1.7的時候使用的是陣列 單鏈表的資料結構。但是在jdk1.8及之後時,使用的是陣列 鍊錶 紅黑樹的資料結構 當鍊表的深度達到8時,也就是預設閾值,會自動擴容,把鍊錶轉換成紅...