key.GetHashCode()返回键

时间:2016-01-10 18:13:12

标签: c# hashtable gethashcode

我正在实现一个哈希表,我使用GetHashCode为我使用的每个键获取一个唯一的哈希码,但是,当我调用key.GetHashCode()时,该函数返回键。在我使用modulo获取哈希表的正确存储桶之后,我们能够实现哈希表,但这看起来不正确。

以下是我的称呼方式。

public V Find(K key)
    {
        int bucketIndex = key.GetHashCode() % N;
        return buckets[bucketIndex].Find(key);
    }

在调用gethashcode之前我们应该进行特殊的初始化吗?

我现在正考虑在重载函数中编写自己的哈希函数,但认为使用函数调用更容易。

1 个答案:

答案 0 :(得分:1)

没有"特殊初始化"在调用GetHashCode()之前要做的。 正如Hans写的那样,Int32的GetHashCode()将返回int本身(see this answer)。

GetHashCode()的默认实现不保证唯一性。要减少哈希代码冲突,您需要覆盖该方法。这里有一个流行的GetHashCode()通用建议:What is the best algorithm for an overridden System.Object.GetHashCode?