首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无碰撞的3 int的Hashcode

无碰撞的3 int的Hashcode
EN

Stack Overflow用户
提问于 2018-06-10 13:26:04
回答 1查看 58关注 0票数 0

您能帮我找到一种最佳的方法来计算具有3个int params (例如abc)的类的hashcode,并且每个param的值可能在预定义的范围内?我的意思是,a应该在某种范围内,从a1a2b相应地从b1b2,还有c,你可能会猜到从c1c2。所有这些a1,a2,b1..。都是常量,并且在哈希代码生成时已知。我希望避免碰撞。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-10 13:42:51

首先,确保总数量的变体-产品(a2 - a1) * (b2 - b1) * (c2 - c1)适合您的哈希代码容量。如果要使用32位无符号int,则该值应该小于2^32

通过选择一些初始值s开始构造哈希码(您可以选择零,从而有效地省略初始值)。然后,对每个param执行以下操作:

  1. 将当前哈希码值乘以当前参数范围(即a2 - a1)
  2. 将调整为范围参数的电流添加到hashcode值中。

对于三个参数的情况,公式是

((s*(a2 - a1) + (a - a1))*(b2 - b1) + (b - b1))*(c2 - c1) + (c - c1)

其中s是可选的起始值。

编辑

应将Param增值调整到其范围。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50784164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档