java - 基于 3 个不同的整数创建一个唯一的整数

标签 java hash int bit-manipulation bit-shift

我想创建一个 inthash在 Java 中,从坐标 x , yw .

x 的值和y有符号且通常为负数。

int 的大小是 32 位。

我想将 4 位分配给 w (如果最高有效位不可用,则为 3),14 位到 x和 14 位到 y .

我尝试了以下方法,但我不明白为什么这些值会发生冲突:w + x << 4 + y << 18 .

例如,x = 1y = 1 冲突当w == 0 .

这样做的优点如下:

  • 快速在数据库中查找
  • 可以更快地比较单个整数,而不是三个整数
  • 无论如何都不会超过为每个整数分配的位数

最佳答案

这里唯一的问题是运算符优先级。 + 位于 << 之前,所以你必须这样写:

w + (x << 4) + (y << 18)

这不会将 wx 限制在其分配的字段中,但这不会对哈希值造成不良影响。如果您使用 | 来组合它们,那么当 wx 为负数时,这将是一个糟糕的哈希,但使用 就可以了+.

关于java - 基于 3 个不同的整数创建一个唯一的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34358330/

相关文章:

java - 如何分别为每个ImageView添加onClickListener?

java - 如何将 javaplot 窗口停靠到 java 中的 JPanel

ruby - 为什么在 Ruby 中定义新散列的简洁方式不起作用(它们都引用同一个对象)

swift - Realm 中的可选整数

java - 实现 DFS 算法的堆栈遍历 - Java

ruby - 比较 RSpec 中包含 BigDecimal 的哈希值

c++ - Rabin-Karp 中的滚动哈希

java - 带有 int : Java believes i want to convert to boolean 的 If 语句

C: static int 获取奇怪的值

java - 分配 GridPane 中的剩余空间或如何操作