在已知元素容量的情況下,為了盡量減少碰撞增加查詢效率,應該盡量選擇較大數的同時避免資源浪費。
HashMap底層通過hash值來計算索引位置的源碼:
1.重新計算hash值
static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); }
2.計算索引
if ((p = tab[i = (n - 1) & hash]) == null) tab[i] = newNode(hash, key, value, null);
由此可見索引位置是新的hash值與運算數組長度減一,而為了盡量使索引值盡量均勻,應當使數組長度為2的倍數,確保與運算的一方都為1。
因此這里可以選擇1024或2048為初始長度。負載因子的值可以選擇0.7~0.8。
