遇到无限循环

时间:2014-10-07 03:50:49

标签: java hash hashmap hashtable hashcode

我在这里遇到了一个无限循环。我需要帮助找到一个边缘案例,我可能没有考虑过。

table是(键,值)对的数组。 isRemoved()标记表的元素(如果已删除)。

index源自'键的散列函数' ...这里我试图将一个元素添加到哈希表中。

int removed = -1;
            while (table[index] != null) {
                if (table[index].isRemoved()) {
                    if (removed != -1) {
                        removed = index;
                    }
                } else {
                    if (key.equals(table[index].getKey())) {
                        dData = table[index].getValue();
                        table[index].setValue(value);
                        return dData;
                    } else {
                        index++;
                        index %= startingSize;
                    }
                }
            }
            if (removed != -1) {
                index = removed;
            }

2 个答案:

答案 0 :(得分:0)

在第一个if

if (table[index].isRemoved()) {
                if (removed != -1) {
                    removed = index;
                }
}

索引没有递增,也没有其他代码被访问

答案 1 :(得分:0)

  • 您的逻辑不是添加元素,而是更新现有值。
  • 另外,你有一个循环逻辑。摆脱" index%= startingSize;"
  • 当索引达到表大小时,您确定表[index]将为null吗?