基本上,我使用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这是最好的方法吗?
提前感谢
发布于 2013-01-26 01:48:11
如果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和负数行为的问题,请参阅this answer。
发布于 2013-01-26 03:25:17
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
https://stackoverflow.com/questions/14527397
复制相似问题