【问题标题】:Do C# dictionaries use hashing in the same manner as Java HashMaps?C# 字典是否以与 Java HashMaps 相同的方式使用散列?
【发布时间】:2018-05-24 09:17:53
【问题描述】:

我了解 Java HashMap 元素根据元素键的哈希值存储在“桶”中。 C# 字典中是否出现相同的散列?如果不是,那么查找是如何工作的?

【问题讨论】:

  • @maytham-ɯɐɥʇʎɐɯ 不是字典与哈希表不同吗?
  • 是的,C# Dictionary<K, V> 的工作方式相同。桶用于将散列空间分割成更小、更易于管理的块,并处理散列冲突。桶数是第一个大于字典容量的素数(因此,当您将第一项插入字典时,它将包含 3 个桶),并且只要需要增加容量,这些项目就会重新排列到新的桶中。
  • 你为什么要问,以防万一这是一个 XY 问题 - meta.stackexchange.com/questions/66377/what-is-the-xy-problem
  • 有源代码;如果您想确切了解它是如何工作的,请阅读源代码。

标签: c# .net dictionary data-structures hashmap


【解决方案1】:

C# System.Collections - 命名空间中有几种字典。他们使用不同的策略来存储内部数据:

这个System.Collections.Specialized.HybridDictionary 使用 DoubleLinkedLists 直到达到一定大小,然后切换到 Hashsets。 “正常”System.Collections.Generics-Dictionary 一直在内部使用哈希集。还有一个同时使用的字典 - 如果您愿意,请自行查找 (Concurrent Dictionary)。

因此,这取决于您使用的字典类型,并且(在上述情况下)可能会由于您出于性能或其他原因而使用的类的内部考虑而发生变化。

【讨论】:

    猜你喜欢
    • 2019-03-22
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 2011-12-11
    相关资源
    最近更新 更多