在已知元素容量的情况下,为了尽量减少碰撞增加查询效率,应该尽量选择较大数的同时避免资源浪费。
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。