Sobes.tech
Junior — Middle

Hogyan befolyásolja a GetHashCode metódus a szótár működését a .NET-ben?

sobes.tech MI

Válasz az MI-től

A GetHashCode metódus a .NET-ben az objektum hash-kódjának megszerzésére szolgál, amelyet például a hash-táblákban, így a szótárakban (Dictionary<TKey, TValue>) használnak.

Amikor egy objektumot hozzáadsz egy szótárhoz, először a GetHashCode hívódik meg, hogy meghatározza a tároló (bucket) helyét. Az objektum keresésekor a szótár a hash-kódot használja gyors hozzáféréshez.

Fontos, hogy:

  • Ha két objektum egyenlő (a Equals metódus szerint), akkor a hash-kódjuknak egyeznie kell.
  • Ha a hash-kódok különböznek, az objektumokat különbözőnek tekintjük.

A GetHashCode helytelen implementálása azt eredményezheti, hogy a szótár nem találja meg a kulcsot, még akkor sem, ha az ott van, vagy a teljesítmény csökkenhet a sok ütközés miatt.

Egy helyes implementáció 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);
    }
}

Így a GetHashCode befolyásolja a szótár helyességét és hatékonyságát.