HashMap初步解析

2021-10-21 07:20:05 字數 1929 閱讀 1827

hashmap集合:

1、hashmap集合底層是雜湊表/雜湊表的資料結構。

2、雜湊表是乙個怎樣的資料結構呢?

雜湊表是乙個陣列和單向鍊錶的結合體。

陣列:在查詢方面效率很高,隨機增刪方面效率很低。

單向鍊錶:在隨機增刪方面效率較高,在查詢方面效率很低。

雜湊表將以上的兩種資料結構融合在一起,充分發揮它們各自的優點。

3、hashmap集合底層的源**:

public class hashmap

}雜湊表/雜湊表:一維陣列,這個陣列中每乙個元素是乙個單向鍊錶。(陣列和鍊錶的結合體。)

4、最主要掌握的是:

map.put(k,v)

v = map.get(k)

以上這兩個方法的實現原理,是必須掌握的。

map.put(k,v)實現原理:

1.將k,v封裝到node物件中

2.底層呼叫k的hashcode()方法,得出hash值

3.通過 雜湊演算法/雜湊函式 將hash轉化為陣列下標,

若該下標位置上沒有元素,就把node新增到該位置上

若該下標位置上有鍊錶,此時會拿著k與鍊錶上的每乙個節點的k進行equals比較:

若比較結果都為false,則將新節點node新增到鍊錶末尾,

若有乙個節點的equals返回了true,則這個節點的value將被覆蓋

v=map.get(k)實現原理:

1.先呼叫k的hashcode()方法,得出hash值

2.通過 雜湊演算法/雜湊函式 將hash轉化為陣列下標,通過陣列下標快速定位到某個位置上,

若該下標位置上沒有元素,返回null

若該下標位置上有鍊錶,此時會拿著k與鍊錶上的每乙個節點的k進行equals比較:

若比較結果都為false,則返回null

若有乙個節點的equals返回了true,則返回這個節點的value

5、hashmap集合的key部分特點:

無序,不可重複。

為什麼無序? 因為不一定掛到哪個單向鍊錶上。

不可重複是怎麼保證的? equals方法來保證hashmap集合的key不可重複。

如果key重複了,value會覆蓋。

放在hashmap集合key部分的元素其實就是放到hashset集合中了。

所以hashset集合中的元素也需要同時重寫hashcode()+equals()方法。

6、雜湊表hashmap使用不當時無法發揮效能!

假設將所有的hashcode()方法返回值固定為某個值,那麼會導致底層雜湊表變成了

純單向鍊錶。這種情況我們成為:雜湊分布不均勻。

什麼是雜湊分布均勻?

假設有100個元素,10個單向鍊錶,那麼每個單向鍊錶上有10個節點,這是最好的,

是雜湊分布均勻的。

假設將所有的hashcode()方法返回值都設定為不一樣的值,可以嗎,有什麼問題?

不行,因為這樣的話導致底層雜湊表就成為一維陣列了,沒有鍊錶的概念了。

也是雜湊分布不均勻。

雜湊分布均勻需要你重寫hashcode()方法時有一定的技巧。

7、重點:放在hashmap集合key部分的元素,以及放在hashset集合中的元素,需要同時重寫hashcode和equals方法。

8、hashmap集合的預設初始化容量是16,預設載入因子是0.75

這個預設載入因子是當hashmap集合底層陣列的容量達到75%的時候,陣列開始擴容。

重點,記住:hashmap集合初始化容量必須是2的倍數,這也是官方推薦的,

這是因為達到雜湊均勻,為了提高hashmap集合的訪問效率,所必須的。

9、在jdk1.8之後,如果雜湊表單向鍊錶中元素超過8個,單向鍊錶這種資料結構會變成紅黑樹資料結構。

當紅黑樹上的節點數量小於6時,會重新把紅黑樹這種資料結構變成單向鍊錶。

這是為了提高檢索效率,二叉樹的檢索會再次縮小掃瞄範圍。提高效率。

HashMap深度解析

簡介 基於雜湊表的 map 介面的實現。此實現提供所有可選的對映操作,並允許使用 null 值和 null 鍵。除了非同步和允許使用 null 之外,hashmap 類與 hashtable 大致相同。此類不保證對映的順序,特別是它不保證該順序恆久不變。此實現假定雜湊函式將元素適當地分布在各桶之間,...

對hashMap的初步理解

當我們建立乙個hashmap,往hashmap裡面put元素的時候,hashmap內部會建立乙個陣列,陣列如果不指定初始容量,那麼hashmap在建立物件時,在第一次put元素的時候會預設指定乙個陣列的初始長度,為16位 static final int default initial capaci...

對HashMap的初步理解

一 hashmap 1 用來儲存key value鍵值對的一種結構 2 底層由陣列 鍊錶實現 二 hash和map的理解 1 雜湊hash 雜湊演算法也叫雜湊演算法,就是把任意長度值 key 通過雜湊演算法變換成固定長度的key位址,通過這個位址進行訪問的資料結構。它通過把關鍵碼值對映到表中乙個位置...