2011-11-18 246 views
2

假設我們希望重複搜索長度爲N的元素的鏈表,其中每個元素都包含一個非常長的字符串鍵。在搜索列表中查找具有給定鍵的元素時,我們如何利用散列值?散列表中的鏈接列表

+0

這是一個Java特定的問題,還是它要求爲此一般的算法。 – jli

+0

您是否可以將密鑰移動到另一個數據結構中,還是必須使用鏈接列表? – Tudor

回答

0

將密鑰插入散列表中。然後你可以搜索(理論上)恆定的時間。

+0

java中的哈希表提供了平均不變的時間添加/刪除(即theta(1)),而不是理論上的。理論上,它們提供O(n)時間來添加/刪除。 –

+0

有許多哈希表實現。你指的是HashTable類嗎?我一般在談論散列。 – Tudor

0

您需要在搜索列表之前準備好散列,並且您需要能夠在恆定時間內訪問字符串的散列。然後,您可以首先比較哈希值,並在哈希值匹配時僅比較字符串。您可以使用散列表而不是鏈接列表。

0

字符串的散列值(hashCode)有點像字符串的id。不完全獨特,但通常很獨特。您可以使用HashMap來存儲字符串鍵及其值。顧名思義,它使用Strings的哈希值來高效地存儲和檢索值。

0

不知道你在這裏工作的約束條件(也就是說,這可能會佔用太多的內存,取決於字符串的大小),但是如果你必須維護鏈表,你可以創建一個映射字符串的HashMap到它們在列表中的位置,這將允許您使用2個恆定時間操作從列表中檢索任何字符串。

+0

即使您在鏈接列表中有一個字符串的位置,您仍然必須遍歷整個列表才能檢索它。它沒有隨機存取。 – Tudor

+0

啊是的 - 優秀的一點。通常我會在發帖之前嘗試真正想想,但顯然這次我失敗了 - 感謝您糾正我的錯誤! – Shaun

0

把它放在HashSet中。搜索算法將使用插入的每個字符串值的散列。