.net - Dictionary<TKey, TValue> 是否在后备存储中添加空元素?

标签 .net dictionary

我正在研究 Dictionary<TKey, TValue> 背后的代码.有趣的是在 private Insert方法,有一个bucket似乎在预先确定大小的数组中包含空槽。 Insert里面方法中,代码会检查桶中是否还有剩余元素,并在必要时调整大小。添加的元素数是素数的因数。此外,字典条目属性存储在具有哈希码、键和值的结构中。

我的问题:目的是什么?这样做是为了防止在可能没有足够的内存可用时尝试向字典对象添加项目吗?

注意:我不想在这里粘贴任何代码,因为它需要反汇编才能阅读。

最佳答案

Dictionary<TKey,TValue>对象不会使用这种方法添加新的空值。它正在做的是为稍后将被要求添加的数据预先分配一个后备存储。最终目标是平均插入案例不需要分配即可完成。相反,它会在现有的桶阵列中找到一个位置来放置自己。

您提到的其他一些项目(如素数和哈希码)的原因是大多数哈希表样式实现的共同属性。我不会在这里一一介绍它们,而是将您指向有关该主题的维基百科文章

关于.net - Dictionary<TKey, TValue> 是否在后备存储中添加空元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4006638/

相关文章:

python - 在 Python 中使用 map on 方法

c# - 如何创建一个结合了CheckedListBox和详细ListView的显示?

C# Tab控件空白处双击

Python 在 FOR 循环中使用 IF

python 搜索字典值并打印

Python 字典和多个 dict[]

c# - Server.CreateObject + 服务器上下文 + COM :-)

c# - WPF - MVVM 架构(Visual Studio 解决方案和项目)

.NET 数据库迁移工具包

python - 在数据库中存储 700 万个键的 python 字典