c# - 哈希表加倍?

标签 c# .net list hashtable

我不知道标题是否有意义,但我想知道当您向哈希表添加项目时,哈希表如何扩大?

是不是像 List<T>当达到限制时它的大小会加倍吗?如果是这样,那么这种加倍是否会从头开始重新创建集合(这也可以回答 List<T> ,因为我不确定这是否是它的作用)?

最后,如果它确实从头开始重新创建它,那么对于不知道已达到限制的用户来说,这个特定的添加操作将非常昂贵,对吗?

最佳答案

我都相信HashtableDictionary<TKey, TValue>将当前计数加倍后扩展到下一个素数,例如31 至 67。

据我了解,调整大小并不涉及重新计算哈希值(因为它们与条目一起存储),而是涉及将每个条目放入其新存储桶中,其中存储桶编号是基于哈希码和存储桶计数。

您询问了List<T> - 这真的很简单。该列表由数组支持,您只需创建一个具有正确大小的新数组,然后复制当前数组的内容即可。像这样的东西:

private void Resize(int newCapacity)
{
    T[] tmp = new T[newCapacity];
    Array.Copy(backingArray, tmp, backingArray.Length);
    backingArray = tmp;
}

关于c# - 哈希表加倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/757608/

相关文章:

c# - 多线程集合锁类型

c# - Unity Hololens (UWP) 构建会生成 Standalone 构建不会产生的错误?

python - 如何在Python列表中查找某些值的特定索引

python - 从 csv 导入包含列表的字典

c# - 线程的编码 UI 测试问题/定期执行重复操作

c# - ZedGraph 调整大小?

c# - 比较两个集合值 c#

c# - 无法在 asp.net core 2.2 应用程序中使用 ef core 2.2 通过 UserManager<TUser> 更新用户

javascript - Websocket 无法在 Chrome/Firefox 上发送/接收消息,在 Microsoft Edge 上工作正常

python - 星球大战 api => IndexError : list index out of range error