我不知道标题是否有意义,但我想知道当您向哈希表添加项目时,哈希表如何扩大?
是不是像 List<T>
当达到限制时它的大小会加倍吗?如果是这样,那么这种加倍是否会从头开始重新创建集合(这也可以回答 List<T>
,因为我不确定这是否是它的作用)?
最后,如果它确实从头开始重新创建它,那么对于不知道已达到限制的用户来说,这个特定的添加操作将非常昂贵,对吗?
最佳答案
我都相信Hashtable
和Dictionary<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/