2016-03-07 73 views
0

有人可以解釋字典和哈希表之間的區別嗎?在Java中,我讀過字典是散列表的超集,但我一直認爲它是相反的方式。其他語言似乎將這兩者視爲相同。什麼時候應該使用另一個,有什麼區別?字典對哈希表

回答

1

計算defines a dictionary作爲牛津詞典...

代表一組能夠支持元件的插入和刪除,以及用於成員資格的測試元件的任何數據結構。

因此,字典是一個抽象的想法,可以合理有效地實施,例如,二叉樹或散列表,嘗試甚至直接進行數組索引,如果這些鍵是數字而不是太稀疏的話。也就是說,python使用封閉散列哈希表來實現其dict,而C#似乎也使用某種散列表(因此需要單獨的SortedDictionary類型)。

一個hash table是一個更具體的和具體的數據結構:有幾種實現方式的選擇(closedopen散列的也許就是最根本的),但他們都特點是O(1)攤銷插入,查詢和刪除,並且開始 - >結束迭代沒有任何理由比O(n + #buckets)差,而實現可能會更好(例如,GCC的C++庫具有O(n)容器迭代),實現必須依賴於導致陣列中的索引探針。

1

我看到它的方式,散列表是一種實現字典的方法。指定鍵是散列函數(x),並且該值是任何對象。只要已經爲該對象實現.equals(y),Java Dictionary就可以使用任何鍵。

'答案'也會根據您使用的語言(C#?Java?JS?)而改變。在JS中,'字典'是作爲散列表實現的,沒有區別。 ----在另一種語言(我相信它是C#)中,Dictionary必須是強類型的固定類型鍵和固定類型值,而Hashtable的值可以是任何類型,並且兩者不會相互擴展。