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...