JDK 1 8 HashMap原始碼解析

2021-10-03 02:55:30 字數 819 閱讀 5120

put方法分析

public v put(k key,v value)
hash方法解析

//減少hash衝突

static final int hash(object key)

putval方法具體實現(

final v putval(int hash,k key,v value,boolean onlyifabsent,boolean evict)

//計算待插入元素的陣列下標

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

elseelse if (p instanceof treenode)

else

break;

}//和鍊錶上結點的key相同

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

p = e;

}} //key相同,待插入的key有重複

if (e!=null)

afternodeaccess(e);

return oldvalue;

} }//待插入的key沒有重複,插入成功e結點的值為null

modcount++;

//如果元素個數》臨界值(陣列長度*載入因子),則擴容

if (++size>threshold)

afternodeinsertion(evict);

return null;

}

JDK1 8 HashMap原始碼解析

普通常量 儲存node鍊錶的陣列 transient node table 由node節點構成的set集合 transient set entryset hashmap儲存元素的數量 transient int size 記錄hashmap結構性變化的次數 value覆蓋不算 和fail fast機...

JDK1 8 HashMap原始碼解析

static final int default initial capacity 1 4 static final int maximum capacity 1 30 static final float default load factor 0.75f 當hashmap的容量增加到當前容量的3...

JDK 1 8 HashMap擴容原理

擴容前計算索引 1010 0101 0000 1111 0000 0101 索引結果 5擴容以後容量是n 32 對應的二進位制是0001 1111 node本身的hash值是不變的,仍然是1010 0101,那麼擴容後node 的索引的計算是通過如下方式得到 擴容後計算索引 1010 0101 00...