为什么HashMap 16的初始容量(2的幂)和Hashtable 11的初始容量(素数)?

时间:2014-12-02 14:11:16

标签: java collections hashmap hashtable

如果您知道,请说明原因。我用Google搜索,但没有找到很好的解释答案。

当你的hashCode为负数时,是否可以使桶的索引为正?

1 个答案:

答案 0 :(得分:8)

对于HashMap,以这种方式计算存储Map条目的数组中的索引(其中h是从密钥的hashCode计算得出的):

static int indexFor(int h, int length) {
    return h & (length-1);
}

其中length是数组的长度。

仅当length为2的幂时才有效。如果length不是2的幂,则必须将此代码更改为效率较低的return h % length