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

问题描述 投票:0回答:8

我一直用字典。我用 Python 编写。

python data-structures hash dictionary hashtable
8个回答
260
投票

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

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

除了哈希表之外,另一种常见的字典实现方式是红黑树

每种方法都有其自身的优点和缺点。 红黑树总是可以在 O(log N) 内执行查找。 哈希表可以在 O(1) 时间内执行查找,尽管根据输入的不同,这可能会降低到 O(N)。


41
投票

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

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

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

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


19
投票

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

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

dict
set

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


13
投票

Python 字典在内部是通过哈希表实现的。


2
投票

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


1
投票

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


0
投票

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


0
投票

字典和哈希表都是.NET中存储键值对的数据结构,但它们有一些区别:

  1. 类型安全:

    • Dictionary 是一个泛型类,这意味着它是类型安全的。您在创建字典时指定键和值的类型。
    • Hashtable 是一个非泛型类,这意味着它不是类型安全的。它将键和值存储为对象,您需要在检索它们时将它们转换为正确的类型。
  2. 性能:

    • 字典通常比哈希表更快,因为它使用更有效的算法来查找键。
    • Hashtable 使用哈希码来存储和检索值,这可能会导致冲突和性能下降。
  3. 空键和值:

    • Dictionary 允许使用 null 键和值,但前提是 TKey 或 TValue 类型是引用类型。
    • Hashtable 不允许空键或空值。
  4. 线程安全:

    • Dictionary 默认情况下不是线程安全的,但您可以使用 ConcurrentDictionary 类使其成为线程安全的。
    • Hashtable 是线程安全的,但它使用锁来同步访问,这可能会导致性能问题。
  5. 继承:

    • Dictionary 继承自 Object,并实现了多个接口,包括 IEnumerable、ICollection 和 IDictionary。
    • Hashtable 继承自 Object,并实现了多个接口,包括 IEnumerable、ICollection 和 IDictionary。
© www.soinside.com 2019 - 2024. All rights reserved.