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

Why is the initial capacity in HashMap 16 (power of two) and the initial capacity of Hashtable 11(prime number)?(为什么HashMap的初始容量是16(2的幂)和Hashtable的初始容量是11(素数)?)
本文介绍了为什么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(素数)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Show progress during FTP file upload in a java applet(在 Java 小程序中显示 FTP 文件上传期间的进度)
How to copy a file on the FTP server to a directory on the same server in Java?(java - 如何将FTP服务器上的文件复制到Java中同一服务器上的目录?)
FTP zip upload is corrupted sometimes(FTP zip 上传有时会损坏)
Enable logging in Apache Commons Net for FTP protocol(在 Apache Commons Net 中为 FTP 协议启用日志记录)
Checking file existence on FTP server(检查 FTP 服务器上的文件是否存在)
FtpClient storeFile always return False(FtpClient storeFile 总是返回 False)