我正在实现一个哈希表,我使用GetHashCode为我使用的每个键获取一个唯一的哈希码,但是,当我调用key.GetHashCode()时,该函数返回键。在我使用modulo获取哈希表的正确存储桶之后,我们能够实现哈希表,但这看起来不正确。
以下是我的称呼方式。
public V Find(K key)
{
int bucketIndex = key.GetHashCode() % N;
return buckets[bucketIndex].Find(key);
}
在调用gethashcode之前我们应该进行特殊的初始化吗?
我现在正考虑在重载函数中编写自己的哈希函数,但认为使用函数调用更容易。
答案 0 :(得分:1)
没有"特殊初始化"在调用GetHashCode()之前要做的。 正如Hans写的那样,Int32的GetHashCode()将返回int本身(see this answer)。
GetHashCode()的默认实现不保证唯一性。要减少哈希代码冲突,您需要覆盖该方法。这里有一个流行的GetHashCode()通用建议:What is the best algorithm for an overridden System.Object.GetHashCode?