【发布时间】:2012-11-27 10:50:41
【问题描述】:
我想知道哈希表在增加容量时如何找到正确的索引。例如,假设我有一个默认容量为 10 的哈希表。现在我们必须添加 (key,value) 对 [14,"你好 1"]
使用下面的索引机制,我们将为上面的键 '14' 获得的索引是 '4'。所以 hashtable 会把这个 (key,value) 对保存在索引 4 中。
int index = key.GetHashCode() % 10
现在我们继续将项目添加到哈希表中,它达到了负载因子。所以是时候调整大小了。让我们假设 hastable resize 到 20。
现在我要在这个哈希表中搜索我的旧键“14”。现在根据索引机制,我会得到这个键的索引为 14。所以我将从索引 14 开始搜索哈希表,但理想情况下它在索引 4 中。
所以我的问题是哈希表在调整大小时如何跟踪现有的键索引?或者哈希表在调整大小时是否会重新散列所有现有键?
【问题讨论】:
-
@MitchWheat - 他的标签有点......含糊不清,所以我没有声明 c# 实现的作用。我将删除那个并重申:“嗯,这取决于它是如何实现的”。
-
在这篇文章中有一节“加载因素和扩展哈希表”,读完后看起来C#哈希表也调整大小msdn.microsoft.com/en-us/library/…
-
我删除了 Java 标记,很抱歉造成混乱
-
您是在询问 .Net 实现,还是扩展哈希表的一般策略?
-
@Josh:它用于 .Net 实现。
标签: c# data-structures hash hashtable