0

以下是插入我自己的哈希表时进行碰撞检测的方法的内部。我正在使用小的测试数字并试图让我的逻辑正确,变量哈希设置为 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 当您检查了所有索引并且它们都已满时。

4

1 回答 1

3

由于您使用%,因此没有溢出的风险,因此您只需将行更改为

int initial = (hash - 1 + table.length) % table.length;

解决这个问题。

于 2012-09-25T20:48:10.177 回答