簡體   English   中英

C#中GetHashCode()的定義

[英]Definition of GetHashCode() in C#

C#中的Dictionary使用GetHashCode()檢索給定鍵的哈希碼。 我遍歷了整個Dictionary Class ,但是GetHashCode()函數沒有任何定義。 這困擾着我,我不知道如何在課堂上找到它的定義!

假設我正在使用Dictionary<int,int> a = new Dictionary<int,int>() ,那么此結構中給定鍵的哈希碼是什么? (例如,假設: a.Add(123,43) 。如果存儲桶數為50,則此密鑰的哈希碼是什么)

這是Dictionary classInsert()函數的一部分。

private void Insert(TKey key, TValue value, bool add)
    {
        int freeList;
        if (key == null)
        {
            ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
        }
        if (this.buckets == null)
        {
            this.Initialize(0);
        }
        int num = this.comparer.GetHashCode(key) & 0x7fffffff;
        int index = num % this.buckets.Length;

如果未指定IEqualityComparer ,則Dictionary使用EqualityComparer<T>.Default 這是一個比較器,它將僅在給定參數上調用object.GetHashCode 因此,請看Int32.GetHashCode

GetHashCode是在您的TKey類型上實現的,而不是在Dictionary類上實現的。

對於您的示例使用的int.GetHashCode() ,其定義為:

public override int GetHashCode()
{
    return this;
}

backets的數量與哈希碼值無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM