HashMap的put()方法实现过程
1.首先是put(k key,V value)方法
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
2.hash(key)方法是将该元素在计算机的物理储存位置映射成为一个int类型的整数并将其散列到散列表中对应的数组位置。进入hash(key)方法—>
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
hash()方法是返回一个散列码,在计算散列表的位置的时候需要(n-1) & hash ,通过位扰动之后使得hash值取的相对均匀。因为规定hashMap的容量使2的幂次方,由于这个特殊性,就导致n-1必定是*0001111。为什么要减一呢?如果是n的话那必定是*00010000。这样与运算的时候,就只会在数组的首段或者尾端产生数组下标。由于是n-1而hash值相对散列的比较均匀,就会在1111之间做与运算使冲突的几率变小。从而能均匀的映射到数组下标。
3.put过程分析
final V putVal(int hash, K key, V value, boolean onlyIfA