数组迭代,跳跃

时间:2012-09-25 20:43:38

标签: java arrays hash if-statement modulo

以下是插入我自己的哈希表时的碰撞检测方法的内部。我正在使用小的测试数字并尝试使我的逻辑正确,变量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或者其他东西开始,第二个是在您检查所有索引并且它们都已满时为止。

1 个答案:

答案 0 :(得分:3)

由于您使用%,因此不存在溢出风险,因此您只需将行更改为

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

解决这个问题。