HashMap原始碼理解

2021-10-08 03:56:31 字數 811 閱讀 5926

map子類常用有

hashmap(無序)和treemap(有序)

hashmap

hashmap的特點:

無序(hash),執行緒不安全,陣列+鍊錶實現

對應的hashtable加了同步鎖(synchronized同步鎖)執行緒安全

hashmap底層是:陣列+鍊錶實現的,陣列下下標存放的是hashcode值,同乙個hashcode值是同乙個鍊錶,鍊錶中存放的是同乙個hashcode,發生hash衝突的value,

底層**:linkedlist list ;key和value是存在乙個內部類entry物件(jdk1.7),node物件(jdk1.8)

hash衝突:key的hashcode相同,物件不同,

例如:integer a =97; 與string a ="a";hashcode值都為97,但是物件不同;

比較物件不同:equals比較

構造方法:hashmap建構函式會傳入陣列大小(1>>4值為16),和載入因子(用於陣列擴容,初始值為0.75)

常用方法put:對獲取key的hashcode作為陣列的下標,存放到陣列鍊錶中,查詢當前的下標是否存在,如果key的hashcode值存在,則對將值儲存到鍊錶的第一位,把之前的值存入到next位

常用方法get:通過key的hashcode獲取陣列是否存在,存在則遍歷鍊錶中的value進行equals比較,相同則返回,

hashmap原始碼理解

在jdk1.8之前是資料 鍊錶方式存 在這裡插入 片 儲,從jdk 1,8開始以資料 鍊錶 紅黑樹方式儲存,具體的儲存方式時根據key來hash碰撞計算key的hash值,來找到對應的陣列中的下標,在判斷鍊錶的next儲存,當單個鍊錶多於8個,並且總的數多於64是啟動resize從新排序,此時才加入...

HashMap原始碼系列 HashMap的屬性

public class hashmap extends abstractmap implements map,cloneable,serializable容載因子 容載因子越大,table陣列中儲存的資料越密集,碰撞的可能性就越大。容載因子越小,儲存越稀疏,碰撞的可能性就越小,不過浪費儲存空間。轉...

HashMap原始碼解讀

一 建立乙個hashmap都做了哪些工作?mapmap new hashmap hahmap無參構造方法 public hashmap 可以看到設定了載入因子 預設0.75 閾值 預設容量16 預設載入因子0.75 12 table是hashmap內部資料儲存結構entry陣列。當hashmap的s...