java哈希代码返回值

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 )

基本上,我使用Objects类中的hasCode()来获取一些字符串的哈希代码

我想让那个数字代表数组中的一个位置。基本上是一个哈希表。 我还没有为此编写代码

我想:

 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 < /代码>,因此我们需要外部的 %10 将其带回到范围内。它仅适用于括号内的值在正确范围内的负数。o是。我决定做一个IF,当它是一个负整数时:它将使用:(hashNumber%array.length+array.length)计算位置,我认为它是有效的。
if (hashNumber >= 0)
  pos = hashNumber % array.length
else
  pos = -hashNumber % array.length
pos = (hashNumber % array.length + array.length) % array.length