我希望找出逻辑,如果有的话,在从中移除元素时缩小c#中的哈希表。
此致 哈里什
答案 0 :(得分:4)
c#hashtables不缩小;他们只会成长。逻辑很重要,因为重新运算算法运行起来非常昂贵;对于大多数情况,通过重新散列到较小的哈希表中节省的空间将完全超出重新散列的成本。特别是在自动的基础上,哈希表中的任何删除可能不是“最后”删除(在算法的基础上无法从哈希表中区分出来),潜在的价值根本就不值得。
如果您的哈希表显着缩小,并且您真的想要回收空间,我建议您只需创建一个新的(具有正确的大小)并将元素复制到它。
答案 1 :(得分:1)
顺便说一句,因为您使用的是.net2.0或更高版本,所以您应该使用Dictionary<K,V>
而不是HashTable。
答案 2 :(得分:0)
文档中哈希表大小更改的唯一指示是超出加载因子并且哈希表的大小增加。没有人提到过顽固不稳的人。
MSDN上的加载因子有一些更详细的信息。