Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java中的哈希代码不使用long来存储哈希值?_Java_Hash - Fatal编程技术网

为什么Java中的哈希代码不使用long来存储哈希值?

为什么Java中的哈希代码不使用long来存储哈希值?,java,hash,Java,Hash,Java使用int result=result*31+C计算散列值。只是好奇为什么选择了31岁。 如有效Java中所述: 选择值31是因为它是奇数素数。如果它是偶数并且乘法溢出,信息就会丢失。因为乘以2等于移位。 对于溢出,为什么不能使用长型?这是关于散列冲突和内存使用的折衷吗?最常见的hashCode()用法是计算bucket的索引,将元素/键添加到HashSet/HashMap`(或查找现有元素/键)。该索引恰好是一个数组索引 数组索引只能是int,因此hashCode()返回long是没有

Java使用
int result=result*31+C
计算散列值。只是好奇为什么选择了31岁。 如有效Java中所述: 选择值31是因为它是奇数素数。如果它是偶数并且乘法溢出,信息就会丢失。因为乘以2等于移位。


对于溢出,为什么不能使用长型?这是关于散列冲突和内存使用的折衷吗?

最常见的
hashCode()
用法是计算bucket的索引,将元素/键添加到
HashSet/
HashMap`(或查找现有元素/键)。该索引恰好是一个数组索引


数组索引只能是
int
,因此
hashCode()
返回
long
是没有意义的。无论如何,您必须将
long
转换为
int

hashCode()最常见的用法是计算bucket的索引,将元素/键添加到
HashSet/
HashMap`(或查找现有元素/键)。该索引恰好是一个数组索引


数组索引只能是
int
,因此
hashCode()
返回
long
是没有意义的。无论如何,您必须将
long
转换为
int

long也会溢出。因为对于大多数散列码的使用,
int
已经足够长了。答案是,,“很多。荒谬的数目。比你想象的要多。当你已经走到了尽头,没有答案的痛苦超过了发帖所带来的巨大耻辱,这时你可以继续提问。因为在那一点上,你将做任何必要的研究,使它成为一个值得问的好问题!“如果它真的这么说,那就是胡说八道。超过2,“奇素数”是一个矛盾修饰法。无论如何,哈希代码的目的不是要唯一,而是要限制范围。实际上,数学家经常使用术语“奇素数”,而不是“两个以外的素数”在像《有效的Java》这样的高质量书籍中看到这句话并不奇怪。矛盾修饰法是完全不同的。long也会溢出。因为对于大多数散列码的使用,
int
已经足够长了。答案是,,“很多。荒谬的数目。比你想象的要多。当你已经走到了尽头,没有答案的痛苦超过了发帖所带来的巨大耻辱,这时你可以继续提问。因为在那一点上,你将做任何必要的研究,使它成为一个值得问的好问题!“如果它真的这么说,那就是胡说八道。超过2,“奇素数”是一个矛盾修饰法。无论如何,哈希代码的目的不是要唯一,而是要限制范围。实际上,数学家经常使用术语“奇素数”,而不是“两个以外的素数”在像《有效的Java》这样的高质量书籍中看到这句话并不奇怪。矛盾修饰法是完全不同的。非常清楚的回答,谢谢非常清楚的回答,谢谢