2016-03-07 63 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的值可以是任何类型,并且两者不会相互扩展。