HashMap的底層原理

2021-10-03 17:59:16 字數 985 閱讀 6977

一:在jdk7中

1.hashmap map=new hashmap()     

在例項化以後,底層建立了長度是16的一維陣列  entrytable

2.map.put(key1,value1)

情況1:

首先,呼叫key1所在類的hashcode()計算key1的雜湊值,此雜湊值經過某種演算法以後,得到在entry中的存放位置,如果此位置上的 資料為空,此時的key1-value1新增成功。

如果此位置上的資料不為空,(意味著此位置上存在乙個或多個資料(以鍊錶形式存在)),比較key1和已經存在的乙個或多個資料的雜湊值:

情況2:如果key1的雜湊值與已經存在的資料的雜湊值都不相同,此時key1-value1新增成功;

如果key1的雜湊值和已經存在的某乙個資料(key2-value2)的雜湊值相同,則繼續比較:呼叫key1所在類的equals(key2)方法,進行比較:

如果equals()返回false,此時key1-value1新增成功;——情況3

如果equals()返回true,使用value1替換value2

補充:關於情況2和情況3:此時key1-value1和原來的資料以鍊錶的方式儲存。

在不斷的新增過程中,會涉及到擴容問題,預設的擴容方式:擴容為原來容量的2倍,並將原有的資料複製過來:

二:jdk8  相較於jdk7在底層實現方面的不同

1)new hashmap(),底層沒有建立乙個長度為16的陣列

2)jdk8底層的陣列是:node,而非entry

3)首次呼叫put()方法時,底層建立長度為16的陣列

4)jdk7底層結構只有:陣列+鍊錶。jdk8中底層結構:陣列+鍊錶+紅黑樹

當陣列的某乙個索引位置上的元素以鍊錶形式存在的資料個數》8,且當前陣列的長度》64時,此時索引位置上的所有資料改為使用紅黑樹儲存。

HashMap底層原理

1.hashmap概述 hashmap是基於雜湊表的map介面的非同步實現。此實現提供所有可選的對映操作,並允許使用null值和null鍵。此類不保證對映的順序,特別是它不保證該順序恆久不變。2.hashmap的資料結構 注意,迭代器的快速失敗行為不能得到保證,一般來說,存在非同步的併發修改時,不可...

HashMap底層原理

hashmap實現map介面,非執行緒安全的,區別於concurrenthashmap。允許使用null值和null鍵,不保證對映的順序.底層資料結構是乙個 陣列 鍊錶 紅黑樹 put 根據key計算得到key.hash h k.hashcode h 16 根據key.hash計算得到桶陣列的索引i...

HashMap底層原理

預設負載因子 static final float default load factor 0.75f 無參構造 public hashmap 有參構造 public hashmap int initialcapacity public hashmap int initialcapacity,flo...