Junior — Middle
Kokia yra metodo GetHashCode vaidmuo naudojant žodyną ar žemės kolekciją?
sobes.tech AI
Atsakymas iš AI
GetHashCode metodas vaidina pagrindinį vaidmenį naudojant žodynus (Dictionary) ir kitas maišos kolekcijas C# kalboje. Jis grąžina sveikąjį skaičių (maišos kodą), kuris naudojamas greitai nustatyti objekto vietą maišos lentelėje.
Pridėdami objektą į žodyną, pirmiausia kviečiama GetHashCode, kad būtų nustatyta kibiras (bucket), į kurį bus įdėtas elementas. Ieškant elemento pagal raktą, taip pat pirmiausia apskaičiuojamas maišos kodas, kad greitai rastųsi tinkamas kibiras, ir tada kviečiama Equals tiksliai palyginti.
Svarbu, kad:
- Jei du objektai yra lygūs (Equals grąžina true), jų GetHashCode turi būti tas pats.
- Gerai paskirstyti maišos kodai sumažina susidūrimus ir pagerina našumą.
Pavyzdys perrašymo:
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);
}
}