Sobes.tech
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);
    }
}