我在這裏遇到無限循環。我需要幫助在這裏找到一個邊緣案例,我可能沒有考慮過。 (鍵,值)對的數組。 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;
}
它不必更新現有值。我試圖通過線性探測來解決衝突。所以如果一個索引被佔用,這個值應該檢查下一個索引。如果是,則檢查下一個,直到找到空索引爲止。如果到了最後,它應該回到零並開始。 因此,表[索引]可能或可能不爲空 – 2014-10-07 04:31:25
您的第一個問題是「這裏我試圖添加一個元素到散列表」。無論如何,當你意識到第一遍沒有碰撞時,爲什麼你要回到零點並重新開始呢?你是否期望表單在一個單獨的線程中被更新,然後顯然同步部分不被關注。 – KiranCK 2014-10-07 05:04:51