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