【问题标题】:Array Iteration, jumping数组迭代,跳跃
【发布时间】: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


【解决方案1】:

由于你使用%,所以没有溢出的风险,所以你可以将行改为

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

解决这个问题。

【讨论】:

    猜你喜欢
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多