本文參考見: 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時,也就是預設閾值,會自動擴容,把鍊錶轉換成紅...