字典和哈希表之间的真正区别是啥?

Posted

技术标签:

【中文标题】字典和哈希表之间的真正区别是啥?【英文标题】:What is the true difference between a dictionary and a hash table?字典和哈希表之间的真正区别是什么? 【发布时间】:2011-01-04 21:30:40 【问题描述】:

我一直使用字典。我用 Python 编写代码。

【问题讨论】:

【参考方案1】:

字典是将键映射到值的一般概念。有很多方法可以实现这样的映射。

哈希表是实现字典的特定方式。

除了哈希表,实现字典的另一种常见方式是red-black trees。

每种方法都有自己的优点和缺点。红黑树总是可以在 O(log N) 中执行查找。哈希表可以在 O(1) 时间内执行查找,但根据输入可能会降级到 O(N)。

【讨论】:

【参考方案2】:

字典是一种将键映射到值的数据结构。

哈希表是一种数据结构,它通过获取键的哈希值(通过对其应用一些哈希函数)并将其映射到存储一个或多个值的存储桶来将键映射到值。

IMO 这类似于询问列表和链表之间的区别。

为了清楚起见,可能需要注意的是,Python 当前可能会使用哈希表来实现其字典,并且将来可能会出现 Python 改变这一事实而不会导致其字典不再是字典的情况。

【讨论】:

主要区别不是字典也存储键吗?因此,您可以在字典中查询其他键 - 您不能查询哈希表 @Martin Beckett:不。两者都可以存储密钥。字典一般。哈希表是一般概念的具体实现。 再想一想,哈希表必须存储密钥以防发生冲突! @danben:不。密钥的存储不是一个显着特征。区别在于字典是一个通用概念,而哈希表是一个实际的实现。 说抽象数据结构会更容易接受吗?我一直交替使用这两者。我觉得“概念”有点太模糊了。【参考方案3】:

“字典”在编程中有几个不同的含义,wikipedia 会告诉你——“关联数组”,Python 使用该术语的意义(也称为“映射”)是其中之一这些含义(但密码猜测尝试中的“数据字典”和“字典攻击”也很重要)。

哈希表是重要的数据结构; Python 使用它们来实现两个重要的内置数据类型,dictset

因此,即使在 Python 中,您也不能将“哈希表”视为“字典”的同义词……因为类似的数据结构也用于实现“集合”!-)

【讨论】:

【参考方案4】:

Python 字典在内部使用哈希表实现。

【讨论】:

dict的子类不是字典的Python实现;这是你自己的。【参考方案5】:

字典和哈希表都将键值对,以便在插入或删除或查找时进行快速的大 O 操作,不同之处在于哈希表使用哈希来存储(键,值)对,这就是我们可以更快地访问数据。 Python 将字典实现为哈希表,映射和集合是一种新的哈希表,在插入时考虑了顺序,您可以将任何类型的对象作为键... 由于顺序,最近列表和哈希表在 Python3 中更相似,请查看此以获取更多详细信息: https://softwaremaniacs.org/blog/2020/02/05/dicts-ordered/en/

【讨论】:

【参考方案6】:

哈希表总是使用一些对值进行操作的函数来确定值的存储位置。字典(我相信你的意思)是一个更通用的术语,只是表示一种查找机制,它可能是一个哈希表,或者可能由一个更简单的结构实现,在确定其存储位置时不考虑值本身。

【讨论】:

【参考方案7】:

字典是使用哈希表实现的。在我看来,两者之间的区别可以被认为是堆栈和数组之间的区别,我们将使用数组来实现堆栈。

【讨论】:

以上是关于字典和哈希表之间的真正区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

字典与哈希表(HashMap)

哈希表/字典冲突

redis hset 和hsetnx 的区别是啥

普通集合和泛型集合的区别,哈希表和字典表的区别,队列和堆栈的区别以及堆和栈的区别。

js 数据结构 字典 哈希表

字典和哈希表空间复杂度