java哈希代码返回值
基本上,我使用Objects类中的hasCode()来获取一些字符串的哈希代码 我想让那个数字代表数组中的一个位置。基本上是一个哈希表。 我还没有为此编写代码 我想:java哈希代码返回值,java,hash,hashcode,Java,Hash,Hashcode,基本上,我使用Objects类中的hasCode()来获取一些字符串的哈希代码 我想让那个数字代表数组中的一个位置。基本上是一个哈希表。 我还没有为此编写代码 我想: int hashNumber = SomeString.hascode(), pos; String array[] = new String[10]; if (hashNumber > 0) pos = hashNumber % array.length if (hasNumber < 0 )
int hashNumber = SomeString.hascode(), pos;
String array[] = new String[10];
if (hashNumber > 0)
pos = hashNumber % array.length
if (hasNumber < 0 )
//dont know what to do
这是最好的方式吗
提前感谢如果
hashNumber
为负值,只需获取-hashNumber
的mod(将为正值):
或者对于同时适用于以下两种情况的单个表达式:
pos = (hashNumber % array.length + array.length) % array.length
查看有关Java使用mod和负数的行为的问题。
结果的符号等于股息的符号
有关更多讨论,请参见此处:
为了安全起见,您可以简单地使用
pos=Math.abs(hashNumber)%array.length
您考虑过只使用HashSet吗?我刚刚测试过它。它给了我一个负整数。换句话说:它不起作用。有趣。。。我用Python做了一个快速测试,并假设模运算在其他地方也可以实现。我希望如此。问题:为什么这样做:%array.length在括号外?with:(hashNumber%array.length+array.length)它将为您提供一个介于数组长度之间的数字。对我来说似乎是多余的。考虑<代码>(9% 10 + 10)< /代码>,它将变成<代码> 9 + 10 < /COD>或<代码> 19 < /代码>,因此我们需要外部的if (hashNumber >= 0)
pos = hashNumber % array.length
else
pos = -hashNumber % array.length
pos = (hashNumber % array.length + array.length) % array.length