【发布时间】:2008-11-19 19:31:08
【问题描述】:
我正在寻找逻辑(如果有的话),当从其中删除元素时,它会缩小 c# 中的哈希表。
问候 哈里什
【问题讨论】:
标签: c# .net .net-2.0 hashtable
我正在寻找逻辑(如果有的话),当从其中删除元素时,它会缩小 c# 中的哈希表。
问候 哈里什
【问题讨论】:
标签: c# .net .net-2.0 hashtable
c# 哈希表不会缩小;他们只会成长。逻辑很重要,因为重新散列算法运行起来非常昂贵;在大多数情况下,通过重新散列到较小的哈希表所节省的空间将完全被重新散列的成本所占用。特别是在自动的基础上,从哈希表中删除的任何内容可能不是“最后一次”删除(在算法基础上无法从哈希表中分辨出来),潜在的价值根本不值得。
如果您的哈希表显着缩小,并且您真的想回收空间,我建议您简单地创建一个新的(大小合适)并将元素复制到其中。
【讨论】:
顺便说一句,由于您使用的是 .net2.0 或更高版本,您可能应该使用 Dictionary<K,V> 而不是 HashTable。
【讨论】:
文档中哈希表大小变化的唯一指示是超过负载因子并且哈希表的大小增加了。没有提到急速收缩。
MSDN 上有负载系数的更多详细信息。
【讨论】: