字典和哈希表之间的真正区别是啥?
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 使用它们来实现两个重要的内置数据类型,dict
和 set
。
因此,即使在 Python 中,您也不能将“哈希表”视为“字典”的同义词……因为类似的数据结构也用于实现“集合”!-)
【讨论】:
【参考方案4】:Python 字典在内部使用哈希表实现。
【讨论】:
dict的子类不是字典的Python实现;这是你自己的。【参考方案5】:字典和哈希表都将键值对,以便在插入或删除或查找时进行快速的大 O 操作,不同之处在于哈希表使用哈希来存储(键,值)对,这就是我们可以更快地访问数据。 Python 将字典实现为哈希表,映射和集合是一种新的哈希表,在插入时考虑了顺序,您可以将任何类型的对象作为键... 由于顺序,最近列表和哈希表在 Python3 中更相似,请查看此以获取更多详细信息: https://softwaremaniacs.org/blog/2020/02/05/dicts-ordered/en/
【讨论】:
【参考方案6】:哈希表总是使用一些对值进行操作的函数来确定值的存储位置。字典(我相信你的意思)是一个更通用的术语,只是表示一种查找机制,它可能是一个哈希表,或者可能由一个更简单的结构实现,在确定其存储位置时不考虑值本身。
【讨论】:
【参考方案7】:字典是使用哈希表实现的。在我看来,两者之间的区别可以被认为是堆栈和数组之间的区别,我们将使用数组来实现堆栈。
【讨论】:
以上是关于字典和哈希表之间的真正区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章