基本上我使用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
这是最好的方法吗?
提前致谢
答案 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