hashmap put 方法 原始碼分析

2021-09-24 19:26:27 字數 1161 閱讀 2921

public v put(k key, v value) 

//如果key==null 執行nullkey 操作

if (key == null)

return putfornullkey(value);

//通過key 計算 hash值

int hash = sun.misc.hashing.singlewordwangjenkinshash(key);

//通過計算出來的hash值 和 hashmapentry 陣列的長度

// 計算出 這個key物件在hashmapentry 陣列的 索引值 index

int i = indexfor(hash, table.length);

//table[i] 不為null 依據鍊錶的資料結構 通過next 進行遍歷

for (hashmapentrye = table[i]; e != null; e = e.next)

}//陣列的第i個物件 table[i] 如果為null

// 直接新建乙個hashmapentry物件

modcount++;

addentry(hash, key, value, i);

return null;

}//nullkey put 操作

private v putfornullkey(v value)

}//table[0] 沒有hashmapentry 將這個元素新增到talbe[0]位置

modcount++;

addentry(0, null, value, 0);

return null;

}//增加乙個hashmapentry物件

void addentry(int hash, k key, v value, int bucketindex)

createentry(hash, key, value, bucketindex);

}//建立 hashmapentry

void createentry(int hash, k key, v value, int bucketindex)

// hashmap 是 陣列+ 鍊錶結構

static class hashmapentryimplements map.entry

HashMap put方法原始碼解析

先上原始碼 public v put k key,v value 這裡先呼叫了hash方法得到key的hash值 並不是直接得到key的hash,具體可以看hash方法 然後呼叫了內部putval方法,hash,key,value引數不需要多說,onlyifabsent 引數 if true,don...

原始碼解析 HashMap put方法解析

1.算出key的hash值,key的hashcode的高低位異或算出來。2.若果雜湊表為空,則初始化雜湊表。3.算出雜湊表下標位置,n 1 hash。4.雜湊表下標位置值為空,則把傳入的引數封裝成node節點設定到雜湊表下標位置。5.如果該雜湊表下標的值不為空,如果key和hash值與傳入的值相等,...

js方法原始碼

去除html標籤 function removehtmltag str ie8相容placeholder標籤 不能輸入以0開頭的正數且不能輸入0,否則返回空字串 input name helpclass.seq keyup function else ps 不能輸入以0開頭的正整數但是可以輸入0的正...