c# - 为什么我不能预先分配一个 hashset<T>

标签 c# hashset

为什么我不能预分配 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/

相关文章:

c# - 各地区的数制问题

java - Knights Path 解决方案的 HashSet 和 LinkedHashSet 之间的行为差​​异

c# - Stripe 401 - 未提供有效的 API key - C#

c# - 如何使用 swagger swashbuckle 保护生成的 API 文档

c# - 如何确定 Web 服务是否正在运行?

java - 为什么对象不相同添加到具有相同值的hashset,甚至hashCode和equals被覆盖

java - 迭代一个集合并创建一个包含 HTML 的字符串

c# - 可编辑的word文档附件

java - 为了在集合中添加一个对象,是否有必要同时覆盖 equals 和 hashcode。?

c# - .NET HashSet 的内部实现包含方法?