hashmap實現了map介面,底層結構是雜湊表:其結構是乙個table陣列,每個陣列元素是乙個entry物件,entry物件包括key、value、next結點指標、hash值,每個entry物件可以作為頭結點延伸成一條鍊錶。這個陣列的長度總是2的n次冪,預設長度是16,這是為了減少hash衝突。因為計算index值時,會用預設長度-1的二進位制與hashcode值進行與運算,2的n次冪-1總是會得到1111這樣的二進位制數,這樣計算出來的結果會減少很多hash衝突。
hashmap是根據元素的key值的hashcode來計算其在陣列中的index。(預設長度情況)其原理就是key值的hashcode對雜湊表的預設長度-1(二進位制)進行(&)與運算,得到乙個1111內的數值index,那就是它在雜湊表的位置。當發生hash衝突時,採用拉鍊法解決hash衝突。首先呼叫equals方法判斷key的內容是不是一樣,如果是則覆蓋舊資料,如果不是則用頭插法(新資料替換舊資料成為頭結點)生成鍊錶。
當hashmap內元素漸漸變多時,會自動增加陣列的長度。這跟載入因子有關。hashmap提供了三個建構函式,空構造、(初始容量)、(初始容量,載入因子)。hashmap預設的長度是16,載入因子是表示雜湊表填滿一定容量後自增容量的尺度,預設為0.75。
hashmap與hashtable的區別:
它們的父類不相同,但都實現了map介面。
hashmap執行緒不安全,hashtable執行緒安全。
hashtable的key-value都不允許出現null值。
hashtable的陣列預設長度是11,hashmap預設是16。
hashtable的擴容方式old*2+1,hashmap是2的n次冪hashtable的使用物件的hashcode得到哈值,hashmap會重新計算。
HashMap的儲存結構及原理
1 hashmap的資料結構 hashmap通過hashcode對其內容進行快速查詢,是無序的 資料結構中有陣列和鍊錶來實現對資料的儲存,但這兩者基本上是兩個極端。陣列 陣列的儲存區是連續的,占用記憶體嚴重,故空間複雜度很大。但陣列的二分查詢時間度小 陣列的特點 定址容易,插入和 刪除困難。鍊錶 鍊...
HashMap的原始碼,實現原理,底層結構
總的來說,hashmap就是陣列 鍊錶的組合實現,每個陣列元素儲存乙個鍊錶的頭結點,本質上來說是雜湊表 拉鍊法 的實現。hashmap的鍊錶元素對應的是乙個靜態內部類entry,entry主要包含key,value,next三個元素 主要有put和get方法,put的原理是,通過hash entry...
HashMap的原始碼,實習原理,底層結構
hashmap就是陣列 鍊錶的組合實現,每個陣列元素儲存乙個鍊錶的頭結點,本質上來說是雜湊表 拉鍊法 的實現。hashmap的鍊錶元素對應的是乙個靜態內部類entry,entry主要包含key,value,next三個元素 主要有put和get方法,put的原理是,通過hash entry.leng...