ConcurrentHashMap源碼解析
面試題:對(duì)象是key的時(shí)候家肯,concurrentHashMap怎么put的帽氓?
關(guān)鍵點(diǎn)在于
(1)求hash值:
//ConcurrentHashMap.java
static final int spread(int h) {
return (h ^ (h >>> 16)) & HASH_BITS;
}
(2)put過(guò)程關(guān)鍵點(diǎn)
for (Node<K,V> e = f;; ++binCount) {
K ek;
if (e.hash == hash &&
((ek = e.key) == key ||
(ek != null && key.equals(ek)))) {
oldVal = e.val;
if (!onlyIfAbsent)
e.val = value;
break;
}
Node<K,V> pred = e;
if ((e = e.next) == null) {
pred.next = new Node<K,V>(hash, key,
value, null);
break;
}
}
如果key的hash相等并且(key的地址相等或者key不為空且key的equals方法返回true),則說(shuō)明兩個(gè)key一致绣夺,需要覆蓋原來(lái)concurrentHashMap的value吏奸。否則新建一個(gè)key、value放入table
如果有不明白的可以關(guān)注我加我微信哦~ 麻煩給個(gè)贊陶耍,謝謝