为什么Java中的哈希代码不使用long来存储哈希值?
Java使用为什么Java中的哈希代码不使用long来存储哈希值?,java,hash,Java,Hash,Java使用int result=result*31+C计算散列值。只是好奇为什么选择了31岁。 如有效Java中所述: 选择值31是因为它是奇数素数。如果它是偶数并且乘法溢出,信息就会丢失。因为乘以2等于移位。 对于溢出,为什么不能使用长型?这是关于散列冲突和内存使用的折衷吗?最常见的hashCode()用法是计算bucket的索引,将元素/键添加到HashSet/HashMap`(或查找现有元素/键)。该索引恰好是一个数组索引 数组索引只能是int,因此hashCode()返回long是没有
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》这样的高质量书籍中看到这句话并不奇怪。矛盾修饰法是完全不同的。非常清楚的回答,谢谢非常清楚的回答,谢谢