hashmap

final V putVal(int hash, K key, V value, boolean onlyIfAbsent,

? ? ? ? ? ? ? boolean evict) {

Node[] tab;

? ? Node p;

? ? int n, i;

? ? //此處會(huì)有線程安全。

? ? if ((tab =table) ==null || (n = tab.length) ==0) {

//如果數(shù)組為空,進(jìn)行數(shù)組初始化

? ? ? ? n = (tab = resize()).length;

? ? }

if ((p = tab[i = (n -1) & hash]) ==null) {

//通過位運(yùn)算,獲取i 的下標(biāo),判斷是否有元素,如果沒有重新創(chuàng)建一個(gè)。

? ? ? ? tab[i] = newNode(hash, key, value, null);

? ? }else {

Node e;

? ? ? ? K k;

? ? ? ? //如果值相等,進(jìn)行值得替換。

? ? ? ? if (p.hash == hash && ((k = p.key) == key || (key !=null && key.equals(k)))) {

e = p;

? ? ? ? }else if (pinstanceof TreeNode) {

//判斷節(jié)點(diǎn)的類型是不是樹,將元素插入到樹中。

? ? ? ? ? ? e = ((TreeNode) p).putTreeVal(this, tab, hash, key, value);

? ? ? ? }else {

//如果節(jié)點(diǎn)的類型是數(shù)組。(binCount 鏈表得長度。)

? ? ? ? ? ? for (int binCount =0; ; ++binCount) {

//如果鏈表最后一個(gè)元素等于空得時(shí)候進(jìn)行了尾插入。

? ? ? ? ? ? ? ? if ((e = p.next) ==null) {

//進(jìn)行尾插入。

? ? ? ? ? ? ? ? ? ? p.next = newNode(hash, key, value, null);

? ? ? ? ? ? ? ? ? ? //當(dāng)鏈表長度是8的時(shí)候進(jìn)行樹化。

? ? ? ? ? ? ? ? ? ? if (binCount >=TREEIFY_THRESHOLD -1) {

// -1 for 1st

? ? ? ? ? ? ? ? ? ? ? ? treeifyBin(tab, hash);

? ? ? ? ? ? ? ? ? ? }

break;

? ? ? ? ? ? ? ? }

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

break;

? ? ? ? ? ? ? ? }

p = e;

? ? ? ? ? ? }

}

if (e !=null) {

// existing mapping for key

? ? ? ? ? ? V oldValue = e.value;

? ? ? ? ? ? if (!onlyIfAbsent || oldValue ==null) {

e.value = value;

? ? ? ? ? ? }

afterNodeAccess(e);

? ? ? ? ? ? //將老的值return

? ? ? ? ? ? return oldValue;

? ? ? ? }

}

++modCount;

? ? //當(dāng)前數(shù)組元素的個(gè)數(shù)。

? ? if (++size >threshold) {

//進(jìn)行擴(kuò)容。

? ? ? ? resize();

? ? }

afterNodeInsertion(evict);

return null;

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容