【发布时间】:2012-09-25 20:43:37
【问题描述】:
以下是插入我自己的哈希表时的冲突检测方法的内部。我正在使用小测试数字并试图让我的逻辑正确,变量哈希设置为 0,table.length 为 10。
else
{
//problem here
int initial=(hash-1)%table.length;
while (table[hash]!=null)
{
hash+=1;
System.out.println(initial);
if (hash==table.length)
{
hash=0;
}
if (hash==initial)
{
System.out.println("FULL!");
break;
}
变量 initial 必须是我当前索引之前的索引(散列)。我的问题是,如果哈希为 0,则初始值需要设置为 9。我认为这会起作用,但例如,当哈希设置为 0 时我得到 -1。第一个 IF 语句循环返回到第一个索引,例如,如果您从 5 点开始,第二个是 for 当您检查了所有索引并且它们都已满时。
【问题讨论】:
-
所以您的问题是由于
-1 % 10在Java 中是-1?一个肮脏的解决办法是使用(table.length + hash - 1) % table.length,但应该有更好的选择。
标签: java arrays hash if-statement modulo