.NET API对构造函数给出了以下注释HashSet<T>(Int32)
:
capacity
由于调整大小相对昂贵(需要重新散列),因此这会尝试通过根据[参数]的值设置初始容量来最大限度地减少调整大小的需要。
基于值的短语让我相信构造函数会做一些比简单地将底层数组容量设置为更聪明的事情capacity
。但我能保证能够capacity
在不调整大小的情况下将项目添加到集合中吗?
底层负载因子当然是一个实现细节。我检查了它是否由任何 API 方法公开,显然没有。所以希望 .NET 能够按照我希望的方式在此构造函数中使用它对负载因子的了解。
点击文档中的源链接即可在 GitHub 上查看实现。
跳过几个方法调用和一个如果
capacity
< 1 则抛出的保护后,我们进入了有趣的部分。因此,它不会在计算中直接使用负载因子,而是使用下一个素数仍然是一种非常理想的实现,正如这里所讨论的。