Sobes.tech
Junior

Kas yra HashSet C#-je?

sobes.tech AI

Atsakymas iš AI

HashSet<T> yra neįprasta unikalių elementų kolekcija. Ji pagrįsta maišos lentelės technologija ir užtikrina greitas operacijas elementų pridėjimui, pašalinimui ir buvimo patikrinimui (vidutiniškai pastoviu laiku, O(1)).

Pagrindinės HashSet<T> savybės:

  • Unikalumas: negali turėti dublių. Bandant pridėti esantį elementą, operacija yra ignoruojama.
  • Nepriklausomumas nuo tvarkos: elementai nėra saugomi jokiu konkrečiu būdu. Peržiūros tvarka gali skirtis nuo pridėjimo tvarkos.
  • Našumas: naudodama maišos funkciją, paieškos, pridėjimo ir pašalinimo operacijos vidutiniškai turi sudėtingumą O(1). Blogiausiu atveju (kai maišos funkcija bloga arba įvyksta kolizijos) našumas gali sumažėti.
  • Daugiafunkcinės operacijos: palaiko įvairias operacijas, tokias kaip sujungimas (UnionWith), sankirta (IntersectWith), skirtumas (ExceptWith), subkategorijos ar superkategorijos patikrinimas (IsSubsetOf, IsSupersetOf).

Pavyzdys:

// HashSet sukūrimas
HashSet<string> vaisiai = new HashSet<string>();

// Elementų pridėjimas
vaisiai.Add("obuolys");
vaisiai.Add("bananas");
vaisiai.Add("apelsinas");
vaisiai.Add("obuolys"); // bus ignoruojama, nes "obuolys" jau yra

// Elemento buvimo patikrinimas
bool turiBanana = vaisiai.Contains("bananas"); // true
bool turiGrapes = vaisiai.Contains("vynuogės"); // false

// Elemento pašalinimas
vaisiai.Remove("apelsinas");

// Elementų peržiūra
foreach (string vaisius in vaisiai)
{
    // išvedimas: obuolys, bananas (tvarka gali skirtis)
    Console.WriteLine(vaisius);
}

// Kolekcijos dydis
int kiekis = vaisiai.Count; // 2

HashSet<T> įgyvendina ICollection<T>, IEnumerable<T> ir ISet<T> sąsajas, leidžiančias naudoti jį įvairiuose kolekcijų scenarijuose ir vykdyti specifinius rinkinių operacijas.