Java - 新的 hashCode 方法
Java - new hashCode method
我应该通过一些更改来覆盖长度为 500 的数组的 hashCode() 方法。
每个数组索引(例如数组 [499])必须正好包含 35512 个对象。
我像这样使用长度为 6 的字符串:"character character character number number number"(例如 "ABX015")。我必须为每个类似的字符串编写一个 hasdcode 方法(从 "AAA000" 到 "ZZZ999" )
我写了这个:
public int hashCode() {
return ((Math.abs(myStringName.hashCode()) %499);
}
唯一的问题是我得到了不同的值,具体取决于我使用的索引。
你能帮帮我吗?
谢谢
因此,您正在对以 3 个字母开头并以 3 个数字结尾的 6 个字符的字符串值进行哈希处理。您想要为所有 17576000 种可能的组合创建一个散列,并让它们落在 0 到 499 之间,并且所有组合都均匀分布在这个散列范围内。您需要它,这样您就可以创建一个大小为 500 的数组来计算碰撞次数。你期望的是 array[*] = 35152 (因为 17576000 / 500 = 35152).
我理解的对吗?
无论如何,这是我想出的简单解决方案:
@Override
public int hashCode() {
int num = Integer.valueOf(myStringName.substring(3));
return num / 2;
}
您知道后三位将是 0-999。只需将其除以 2 并将其用作您的哈希。
我应该通过一些更改来覆盖长度为 500 的数组的 hashCode() 方法。 每个数组索引(例如数组 [499])必须正好包含 35512 个对象。
我像这样使用长度为 6 的字符串:"character character character number number number"(例如 "ABX015")。我必须为每个类似的字符串编写一个 hasdcode 方法(从 "AAA000" 到 "ZZZ999" )
我写了这个:
public int hashCode() {
return ((Math.abs(myStringName.hashCode()) %499);
}
唯一的问题是我得到了不同的值,具体取决于我使用的索引。
你能帮帮我吗?
谢谢
因此,您正在对以 3 个字母开头并以 3 个数字结尾的 6 个字符的字符串值进行哈希处理。您想要为所有 17576000 种可能的组合创建一个散列,并让它们落在 0 到 499 之间,并且所有组合都均匀分布在这个散列范围内。您需要它,这样您就可以创建一个大小为 500 的数组来计算碰撞次数。你期望的是 array[*] = 35152 (因为 17576000 / 500 = 35152).
我理解的对吗?
无论如何,这是我想出的简单解决方案:
@Override
public int hashCode() {
int num = Integer.valueOf(myStringName.substring(3));
return num / 2;
}
您知道后三位将是 0-999。只需将其除以 2 并将其用作您的哈希。