字典与哈希表

时间:2016-03-07 01:33:16

标签: dictionary hashtable

有人可以解释词典和哈希表之间的区别吗?在Java中,我读过字典是哈希表的超集,但我一直认为它是另一种方式。其他语言似乎将两者视为相同。应该何时使用另一个,有什么区别?

2 个答案:

答案 0 :(得分:1)

我看到它的方式,哈希表是实现字典的一种方式。指定键是hashfunction(x),值是任何Object。只要为该对象实现了.equals(y),Java Dictionary就可以使用任何键。

答案'也将根据你正在使用的语言(C#?Java?JS?)而改变。在JS的词典'实现为哈希表,没有区别。 ----用另一种语言(我相信它是C#),字典必须是强类型固定类型键和固定类型值,而Hashtable的值可以是任何类型,而且两者不是彼此延伸。

答案 1 :(得分:1)

牛津计算机词典defines a dictionary为......

  

任何表示一组元素的数据结构,这些元素可以支持元素的插入和删除以及成员资格的测试。

因此,字典是一种抽象的概念,可以合理有效地实现,例如,二进制树或散列表,尝试,甚至直接数组索引,如果键是数字而不是太稀疏。也就是说,python使用封闭散列哈希表进行dict实现,而C#似乎也使用某种哈希表(因此需要单独的SortedDictionary类型)。

hash table是一个更加具体和具体的数据结构:有几个实现选项(closedopen哈希可能是最基本的),但它们是'所有的特点是O(1)摊销插入,查找和删除,并且开始 - >结束迭代没有借口比O(n + #buckets)差,而实施可能会更好(例如GCC&#39 ; s C ++库有O(n)容器迭代。实现必然依赖于散列函数,导致数组中的索引探测。