以下是插入我自己的哈希表时的碰撞检测方法的内部。我正在使用小的测试数字并尝试使我的逻辑正确,变量hash设置为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必须是BEFORE之前的索引(哈希)。我的问题是如果hash为0,则需要将initial设置为9.我认为这可行,但是当hash设置为0时我得到-1。第一个IF语句循环回到第一个索引,例如,如果您在中间以5或者其他东西开始,第二个是在您检查所有索引并且它们都已满时为止。
答案 0 :(得分:3)
由于您使用%
,因此不存在溢出风险,因此您只需将行更改为
int initial = (hash - 1 + table.length) % table.length;
解决这个问题。