HashMap的相關原始碼分析

2022-09-14 02:03:10 字數 1334 閱讀 2851

前提知識:

常見資料結構

(暫未發布)j**a.lang.object的hashcode與equals函式

hashmap的資料結構--基於hash表實現

原始碼分析:  補充:(暫未發布)transient瞬態非序列化關鍵字詳情

public

class hashmap

public final boolean equals(object o)

return false;}} 

} 存值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;}}

if (e != null)

}++modcount;

if (++size >threshold)

resize();

afternodeinsertion(evict);

return

null

; }

concurrenthashmap原始碼片段分析:
通過利用存值put時利用synchronize同步**塊解決多執行緒存值的執行緒安全問題

public

v put(k key, v value)

/**implementation for put and putifabsent

*/final v putval(k key, v value, boolean

onlyifabsent)

else

if ((fh = f.hash) ==moved)

tab =helptransfer(tab, f);

else

node

pred =e;

if ((e = e.next) == null

) }

}else

if (f instanceof

treebin) }}

}if (bincount != 0) }}

addcount(1l, bincount);

return

null

; }

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...

HashMap原始碼分析

public v put k key,v value if key null return putfornullkey value int hash hash key int i indexfor hash,table.length for entrye table i e null e e.nex...