HashMap原始碼分析(put get)

2022-08-28 11:06:15 字數 1757 閱讀 2580

2.文中只涉及hashmap的put/get方法,**理解附在注釋上(直接看**更清晰)。

3.jdk1.8中,hashmap採用位桶+鍊錶+紅黑樹實現,當鍊表長度超過閾值(8)時,將鍊錶轉換為紅黑樹。

1.單向鍊錶

//

單向鍊錶,實現了map.entry介面

static

class nodeimplements map.entry

public

final k getkey()

public

final v getvalue()

public

final string tostring()

public

final

inthashcode()

public

final

v setvalue(v newvalue)

//判斷兩個node是否相等,key與value均相等則返回true

public

final

boolean

equals(object o)

return

false

; }

}

2.紅黑樹

//

紅黑樹(太多了,放一些屬性及建構函式)

static

final

class treenodeextends linkedhashmap.entry

}

3.位桶

transient node table;

public

class hashmapextends abstractmapimplements map, cloneable, serializable

public

v get(object key)

final nodegetnode(int

hash, object key)

while ((e = e.next) != null

); }

}return

null

; }

2.put方法

public

v put(k key, v value)

final v putval(int hash, k key, v value, boolean

onlyifabsent,

boolean

evict)

//判斷節點是否相同

if (e.hash == hash &&((k = e.key) == key || (key != null &&key.equals(k))))

break

; p =e;}}

//更新hash與key均相同節點的value值

if (e != null)

}++modcount;

if (++size >threshold)

resize();

afternodeinsertion(evict);

return

null

; }

本文主要記錄hashmap原始碼學習過程,只針對put/get方向性理解,有錯誤請指正,一起學習一起進步。

HashMap原始碼解析《一》put方法

在jdk1.8裡邊 hashmap的實現原理不僅僅只由位桶 鍊錶實現 增加位桶 紅黑樹實現,在桶中鍊錶儲存的元素個數到達閾值時 預設為8 將在底層將鍊錶轉為紅黑樹,但因為我本人紅黑樹掌握的並不好,所以不討論有關紅黑樹,本文主要講解基礎,hashmap的put方法,其他請等待下文 一,所涉及到的名詞 ...

HashMap原始碼分析

public hashmap int initialcapacity,float loadfactor 2 接下來是重要的put方法,put方法用於將鍵值對儲存到map中,讓我們來具體分析一下。public v put k key,v value if key null 若key為null,則將va...

HashMap 原始碼分析

1 getentry object key 方法 final entrygetentry object key return null 根據key的hash值計算出索引,得到table中的位置,然後遍歷table處的鍊錶 for entrye table indexfor hash,table.le...