簡體   English   中英

哈希表,哈希函數:值,鍵,哈希值之間的區別?

[英]Hashtable, Hashfunction: Difference between Value, Key, Hashvalue?

假設我們有要放入哈希表中的數據。 Hashfunction為每個數據對象計算一個Hashvalue,並將此hashvalue放入表中(每個值都應具有自己的存儲桶)。 通過哈希值,我們知道數據對象在表中的確切位置。

鑰匙在這里起什么作用? Java中的HashMap希望為我們放入HashMap的每個值指定一個特定的鍵,並使用該鍵可以獲取該值。

我想知道我們要放入哈希表(在Java Hashmap中)的值,哈希值和鍵之間的區別是什么? 其背后的數學是什么?

您始終需要原始密鑰,以應對哈希沖突。 哈希碼(或您所稱的哈希值)的目的是能夠非常快速地找到鍵的可能匹配項。 哈希碼基於密鑰-值完全無關。

從邏輯上講,從哈希表中獲取數據是:

  • 計算我們正在尋找的密鑰的哈希碼
  • 查找具有相同哈希碼的所有條目。 (這很快,因為我們只處理數字,並且我們可以安排一個數據結構,使查找具有給定哈希碼的條目變得容易。這里有很多選擇。)
  • 對於每個具有正確哈希碼的條目,將我們正在搜索的鍵與條目中的鍵進行比較。
    • 如果現有鍵和我們要搜索的鍵相等,則返回該條目的值
  • 無匹配? 返回null表示該結果。

(將哈希表划分為存儲桶的確切方法是實現細節。有時每個存儲桶僅包含一個條目,但可以鏈接到其他存儲桶;在其他情況下,存儲桶可以包含多個條目。請參見有關哈希Wikipedia條目表格以獲取更多信息。)

這里的“條目”是{key, value, hash}元組:

  • 哈希完全來自密鑰; 該值無關緊要
  • 永遠不會有兩個相等的鍵
  • 可能有多個具有相同值的條目。 價值平等是無關緊要的
  • 由於哈希沖突,可能會有多個具有相同哈希的條目; 這很重要,因為在嘗試查找特定鍵的匹配項時有更多條目需要瀏覽

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM