为什么我不能预分配 hashset<T>
?
有时我可能会向它添加很多元素并且我想消除调整大小。
最佳答案
下面的答案写于 2011 年。现在在 .NET 4.7.2 和 .NET Core 2.0 中;它将在 .NET Standard 2.1 中。
没有技术原因说明为什么这不应该成为可能 - 微软只是没有选择公开具有初始容量的构造函数。
如果你可以调用一个接受 IEnumerable<T>
的构造函数并使用 ICollection<T>
的实现,我相信会使用集合的大小作为初始最小容量。请注意,这是一个实现细节。容量只需要大到足以存储所有不同的元素...
编辑:我相信,如果容量比它需要的大得多,构造函数将在完成找出有多少不同的元素真正时修剪多余的部分。
无论如何,如果您拥有您要添加到 HashSet<T>
的集合并且它实现了ICollection<T>
,然后将它传递给构造函数而不是一个一个地添加元素将是一个胜利,基本上 :)
编辑:一种解决方法是使用 Dictionary<TKey, TValue>
而不是 HashSet<T>
,并且只是不使用这些值。不过,这并非在所有情况下都有效,因为它不会为您提供与 HashSet<T>
相同的界面。 .
关于c# - 为什么我不能预先分配一个 hashset<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6771917/