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

时间:2022-10-13
本文介绍了为什么HashMap的初始容量是16(2的幂)和Hashtable的初始容量是11(素数)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

如果您知道,请描述原因.我用谷歌搜索了它,但没有找到解释清楚的答案.

Please describe the reason if you know. I Googled it, but didn't find well explained answers.

当您的 hashCode 为负数时,是否使存储桶的索引为正数?

Is it for making index of bucket positive when your hashCode is negative?

推荐答案

对于HashMap,存储Map的条目的数组中的索引是这样计算的(其中h 由 key 的 hashCode 计算得出):

For HashMap, the index in the array that stores the entries of the Map is calculated this way (where h is calculated from the hashCode of the key):

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

其中 length 是数组的长度.

Where length is the length of the array.

这仅在 length 是 2 的幂时有效.如果 length 不是 2 的幂,则必须将此代码更改为效率较低的 返回 h % 长度.

This only works when length is a power of 2. If length wasn't power of 2, you would have to change this code to the less efficient return h % length.

这篇关于为什么HashMap的初始容量是16(2的幂)和Hashtable的初始容量是11(素数)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

上一条:杰克逊:地图的反序列化 下一条:如何清除要被垃圾收集的对象(HashMap) - Java

相关文章

最新文章