外部文件的哈希函数 Java
Hashing function for external file Java
我正在尝试创建一个散列函数,以便将节点放入 RandomAccessFile。
我的节点大小是 256 bytes.I 在某处读到长度应该是总节点大小的两倍。我将在文件中放置 1,000 个节点,因此我选择 2,000 作为总大小。
我试过使用这个公式
整数位置 = key.hashCode() & (2000 - 1)
但我总是得到太小而无法容纳节点的位置。例如,当我打印我得到的位置时
位置 521 和 524
但是我的节点是 256 字节,所以如果我要在位置 521 写一个节点,在 524 写另一个节点,它们会重叠...对吗?
我尝试了来自 Whosebug 和互联网上其他资源的一系列散列函数,但我找不到一个有效的函数。
如果您有 1000 个节点,则 521 和 524 表示位置是 256 的倍数。以字节为单位的实际位置是通过将此数字乘以 256 或将其左移 8 来计算的。
注意:使用& (x-1)
的截断技巧仅在x
是2的幂时有效。由于2000不是2的幂,您不能使用 & (2000 - 1)
来截断您的哈希码。
这里有两个选择:
- 改用
%
,即key.hashCode() % 2000
(注意负数),或者
- 使用 2 的次方,即 2048:
key.hashCode() & (2048 - 1)
我正在尝试创建一个散列函数,以便将节点放入 RandomAccessFile。
我的节点大小是 256 bytes.I 在某处读到长度应该是总节点大小的两倍。我将在文件中放置 1,000 个节点,因此我选择 2,000 作为总大小。
我试过使用这个公式
整数位置 = key.hashCode() & (2000 - 1)
但我总是得到太小而无法容纳节点的位置。例如,当我打印我得到的位置时
位置 521 和 524
但是我的节点是 256 字节,所以如果我要在位置 521 写一个节点,在 524 写另一个节点,它们会重叠...对吗?
我尝试了来自 Whosebug 和互联网上其他资源的一系列散列函数,但我找不到一个有效的函数。
如果您有 1000 个节点,则 521 和 524 表示位置是 256 的倍数。以字节为单位的实际位置是通过将此数字乘以 256 或将其左移 8 来计算的。
注意:使用& (x-1)
的截断技巧仅在x
是2的幂时有效。由于2000不是2的幂,您不能使用 & (2000 - 1)
来截断您的哈希码。
这里有两个选择:
- 改用
%
,即key.hashCode() % 2000
(注意负数),或者 - 使用 2 的次方,即 2048:
key.hashCode() & (2048 - 1)