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
Equalsmetó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.