gpt4 book ai didi

java - 如何从哈希计算数组索引

转载 作者:行者123 更新时间:2023-11-30 06:12:19 25 4
gpt4 key购买 nike

我看过有关如何为字符串创建散列的示例。这是 Java 中的一个示例:

private int getHashCode(String text) {
int hash = 7;
for (int i = 0; i < text.length(); i++) {
hash = hash * 31 + text.charAt(i);
}

return hash;
}

这当然可以产生很大的数字。如果我将我的字符串存储在一个数组中并且我只有 10 个数组项,我如何从哈希码计算数组索引?我当然可以使用 HashMap 来执行此操作,但我想将此操作作为学习如何从哈希代码创建索引的一部分。

最佳答案

您可以使用余数运算符 (%) 将哈希码映射到数组的索引:

int index = obj.getHashCode ("SomeString") % yourArray.length;

当然,您应该能够处理冲突(即两个或多个字符串映射到同一数组索引的情况)。

HashMap 通过在数组的每个索引中存储一个条目实例来处理这种潜在的冲突,该条目实例可以指向映射到同一索引的下一个条目(从而形成一个链表)。

编辑:

正如下面正确评论的那样,% 运算符不适用于负散列码。或者,您可以使用 Math.floorMod (在 Java 8 中引入)改为:

int index = Math.floorMod (obj.getHashCode ("SomeString"), yourArray.length);

无论哈希码的符号如何,这都保证返回一个非负索引。

或者您可以采用 HashMap 实现中使用的替代方法。如果数组的长度始终是 2 的幂,则可以使用 obj.getHashCode ("SomeString") & (yourArray.length - 1)

关于java - 如何从哈希计算数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33017670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com