【发布时间】:2011-10-09 22:59:45
【问题描述】:
为什么我不能预分配hashset<T>?
有时我可能会向其中添加很多元素并且我想消除调整大小。
【问题讨论】:
-
简短的回答是“coz”。因为这就是MS决定用他们无限的智慧来写它的方式。对你没有帮助,但在这种情况下就是这样。但是,如果您有一个预定义的项目集合,希望在创建时放入其中,请使用
new HashSet<sometype>(items) -
不,因为尽管 List 有 9999 个空槽,但它没有使用,并且只有使用的槽被复制到 HashSet 中。如果您能够预先将数据构建到列表或类似列表中,那么您可以通过一个简单的步骤将其转储到 HashSet 中。不幸的是,您所追求的东西在 HashSets 中不存在。也许是一个字典,但代价是每个条目都有一个未使用的值。
-
或者使用支持容量的non-Generic、non-typesafe、Hashtable。 (我想我只是在嘴里吐了一点)
-
您可以实现自己的类型安全 HashTable。会很直接。
-
随着 .NET 4.7.2 的变化。它添加了一个接受容量参数的新构造函数。