1

基本上我正在使用 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

这是最好的方法吗?

提前致谢

4

2 回答 2

3

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

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

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

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

请参阅有关 Java 对 mod 和负数的行为的问题的答案。

于 2013-01-25T17:48:11.303 回答
0

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

结果的符号等于被除数的符号。

有关更多讨论,请参见此处:Java 如何使用负数进行模数计算?

为了安全起见,您可以简单地使用pos = Math.abs(hashNumber) % array.length

于 2013-01-25T19:25:16.590 回答