代码之家  ›  专栏  ›  技术社区  ›  Bizon4ik

3 int的hashcode,无冲突

  •  0
  • Bizon4ik  · 技术社区  · 6 年前

    你能帮我找到计算包含3个int参数的类的hashcode的最佳方法吗(比方说 a , b , c )每个参数的值可能在预定义的范围内?我的意思是 应该在一定范围内 a1 a2 , 相应地 b1 b2 C 如你所料 c1 c2 . 所有这些A1,A2,B1…在hashcode生成时是常量和已知的。我希望避免碰撞。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Vasily Liaskovsky    6 年前

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

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

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

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

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

    哪里 S 是可选的起始值

    编辑

    应将参数增值调整到其范围