Sobes.tech
Junior — Middle

Mi a szerepe a GetHashCode metódusnak szótár vagy hash-kollekció használatakor?

sobes.tech MI

Válasz az MI-től

A GetHashCode metódus kulcsszerepet játszik a szótárak (Dictionary) és más hash-kollekciók használatában C#-ban. Visszaad egy egész értéket (hash-kódot), amelyet arra használnak, hogy gyorsan meghatározzák egy objektum helyét a hash-táblában.

Amikor egy objektumot hozzáadsz egy szótárhoz, először a GetHashCode hívódik meg, hogy meghatározza a kosár (bucket) helyét, ahová az elem kerül. Az elem keresésekor a kulcs alapján szintén először a hash-kódot számítják ki, hogy gyorsan megtalálják a megfelelő kosarat, majd a pontos összehasonlításhoz az Equals hívódik.

Fontos, hogy:

  • Ha két objektum egyenlő (az Equals true-t ad vissza), akkor a GetHashCode értékük ugyanaz kell legyen.
  • A jól elosztott hash-kódok csökkentik az ütközéseket és növelik a teljesítményt.

Felülírás példája:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public override bool Equals(object obj)
    {
        if (obj is Person other)
            return Name == other.Name && Age == other.Age;
        return false;
    }

    public override int GetHashCode()
    {
        return HashCode.Combine(Name, Age);
    }
}