向HashMap中添加1000个元素,设置new HashMap()值为多少合适?

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

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。

posted @ 2019-03-07 09:53  Noctis33  阅读(1672)  评论(0编辑  收藏  举报