java hashcode返回值

时间:2013-01-25 17:43:08

标签: 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 )
   //dont know what to do

我确实知道hashCode可以返回一个负整数。 如果是负整数怎么办? 我虽然增加了数组长度

  pos = hashNumber + array.length

这是最好的方法吗?

提前致谢

2 个答案:

答案 0 :(得分:3)

如果hashNumber是否定的,只需获取-hashNumber的mod(这将是正数):

if (hashNumber >= 0)
  pos = hashNumber % array.length
else
  pos = -hashNumber % array.length

或者对于两个都适用的单个表达式:

pos = (hashNumber % array.length + array.length) % array.length

有关使用mod和负数的Java行为的问题,请参阅this answer

答案 1 :(得分:0)

http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.17.3

  

结果的符号等于股息的符号。

有关详情,请参阅此处:How does java do modulus calculations with negative numbers?

为安全起见,您只需使用pos = Math.abs(hashNumber) % array.length

即可