2014-10-07 86 views
0

我在这里遇到无限循环。我需要帮助在这里找到一个边缘案例,我可能没有考虑过。 (键,值)对的数组。 isRemoved()标记表的一个元素,如果它已被删除。遇到无限循环

index从'key'的哈希函数派生...在这里我试图添加一个元素到散列表。

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; 
      } 

回答

0
  • 你的逻辑不添加元素,但更新现有值。
  • 此外,你有一个循环逻辑。摆脱“index%= startSize;”
  • 当索引达到表大小时,你确定表[索引]将为空吗?
+0

它不必更新现有值。我试图通过线性探测来解决冲突。所以如果一个索引被占用,这个值应该检查下一个索引。如果是,则检查下一个,直到找到空索引为止。如果到了最后,它应该回到零并开始。 因此,表[索引]可能或可能不为空 – 2014-10-07 04:31:25

+0

您的第一个问题是“这里我试图添加一个元素到散列表”。无论如何,当你意识到第一遍没有碰撞时,为什么你要回到零点并重新开始呢?你是否期望表单在一个单独的线程中被更新,然后显然同步部分不被关注。 – KiranCK 2014-10-07 05:04:51

0

在该第一if

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

索引没有被增量并且没有其他代码访问

+0

所以我在if条件中递增索引。它仍然是一个无限循环。 – 2014-10-07 04:05:52