哈希表和桶陣列
回答
在實際中,已經計算(通過散列密鑰)計算的條目的鏈接列表以進入該存儲桶。
在HashTable中有大部分時間衝突。那就是當不同的元素具有相同的散列值時。具有相同散列值的元素存儲在一個存儲桶中。因此,對於每個散列值,您都有一個存儲桶,其中包含具有該散列值的所有元素。
桶數組中涉及的內容很大程度上取決於散列表中存儲的內容以及衝突解決策略。
當您使用linear probing或其他open addressing technique,你的水桶表存儲鍵或鍵值對,這取決於您使用哈希表*的。
當您使用separate chaining technique時,您的存儲區數組存儲密鑰對和鏈接結構的標題(例如鏈接列表)。
要記住關於桶數組的重要事項是它建立了一個哈希碼和一組零個或多個鍵之間的映射。換句話說,給定一個散列碼和一個桶數組,你可以在常量時間內找出與這個散列碼相關聯的可能鍵(枚舉候選鍵可能是線性的,但找到第一個鍵需要是常數以便滿足散列表的平均等待時間插入和恆定時間搜索的性能保證)。
*如果您的哈希表我們用於檢查成員資格(即它代表一組密鑰),那麼存儲區數組存儲密鑰;否則,它存儲鍵值對。
數組索引大多等同於散列值(好吧,散列值mod是數組大小),所以根本不需要將數組存儲在數組中。
至於什麼實際的數組包含有幾個選項:
如果我們使用separate chaining:
到所有具有元素的鏈接列表的引用那個散列值。因此:
LinkedList<E>[]
鏈接列表節點(即,鏈接列表的頭部) - 類似於第一個選項,但是我們只需從鏈接列表中直接開始,而不必通過單獨引用它來浪費空間。所以:
LinkedListNode<E>[]
如果我們使用open addressing,我們只是存儲實際元素。如果有另一個具有相同散列值的元素,我們使用一些可重現的技術爲它找到一個位置(例如,我們只是嘗試下一個位置)。所以:
E[]
可能有一些其他的選擇,但以上是最知名的,具有獨立,鏈接是最流行的(據我所知)
* I」假設熟悉泛型和Java/C#/ C++語法 - E
這裏只是我們存儲的元素的類型,LinkedList<E>
表示存儲E
類型的元素的LinkedList
。 X[]
是一個包含X
類型元素的數組。
所以我們可以說,使用散列函數返回的索引,我們可以找到存儲在存儲區數組中的條目... – xdevel2000
@ xdevel2000是的,但你通常不直接使用它,通常你使用'hashCode%buckets.Length'來找到索引。 –
@ xdevel2000單獨的鏈接將返回匹配哈希值(mod數組大小)的元素的列表**,而對於開放尋址,您可能必須環視一下才能找到正確的元素(是的,這是一個有點模糊,但澄清它需要廣泛的解釋)。對於單獨的鏈接,index處的列表=元素的散列值將包含該元素。而且,對於開放尋址,我們也可以通過開始查看該索引來找到它。我不會說你的陳述是完全正確的,因爲在這個索引中,SC有一個清單,OA不一定是這個元素。 – Dukeling
存儲桶是鍵值對的鏈接列表。散列索引是告訴「哪個桶」的一個 ,並且鍵值對中的「鍵」是告訴「該桶中的哪個條目」的那個。 也退房 hashing in Java -- structure & access time,我有蜜蜂在那裏告訴更多的細節。
- 1. Powershell陣列或哈希表?
- 2. 哈希表在陣列....和JSON
- 3. 比較哈希陣列陣列和outputing哈希值的新陣列
- 4. 在哈希陣列
- 5. 哈希陣列(autovivification ??)
- 6. Rails哈希陣列哈希如何?
- 7. 哈希散列與陣內哈希
- 8. 哈希表鬥陣
- 9. 陣列哈希散列
- 10. 按陣列鍵排列哈希陣列
- 11. 修改陣列的嵌套哈希和哈希
- 12. Powershell陣列與單哈希表
- 13. 循環通過陣列從哈希表
- 14. 陣列哈希而求和值
- 15. angular2和iter通過哈希陣列
- 16. PHP哈希鍵陣列
- 17. 遍歷軌哈希陣列
- 18. Perl轉儲哈希陣列
- 19. 在哈希存儲陣列
- 20. 哈希轉換陣列JSON
- 21. 在Perl中哈希陣列
- 22. Perl哈希陣列大小
- 23. 哈希操作陣列
- 24. Rails哈希/陣列關係
- 25. JavaScript中的哈希陣列
- 26. 與許多陣列哈希
- 27. 哈希表vs哈希列表與哈希樹?
- 28. 如何比較哈希表的屬性與Powershell中的哈希表陣列
- 29. 哈希表和列表並排嗎?
- 30. 從哈希陣列中讀取列
爲什麼不打開HashTable/HashMap的實現/源代碼並查看它? .. http://docs.oracle.com/javase/7/docs/api/java/util/Hashtable.html – TheLostMind