Sobes.tech
Junior

Kokie kolekcijų tipai yra C#?

sobes.tech AI

Atsakymas iš AI

C# siūlo daugybę kolekcijų tipų duomenų saugojimui ir valdymui, kurie yra išdėstyti skirtinguose vardų erdvėse (pagrinde System.Collections, System.Collections.Generic, System.Collections.Concurrent, System.Collections.Immutable). Juos galima klasifikuoti pagal keletą pagrindinių požymių:

  1. Pagal saugomų duomenų tipą:

    • Be tipo (Untyped): Saugo objektus object tipo (System.Collections). Reikalauja tipų konvertavimo ir gali būti mažiau efektyvūs.
    • Tipizuoti (Generic): Saugo tam tikro tipo objektus (System.Collections.Generic). Užtikrina tipų saugumą ir geresnį našumą.
  2. Pagal duomenų struktūrą:

    • Sąrašai (Lists): Sekos kolekcijos, prieiga prie elementų pagal indeksą.
      • ArrayList (be tipo)
      • List<T> (tipizuotas)
      • LinkedList<T> (tipizuotas dvipusis sąrašas)
    • Masivai (Arrays): Fiksuoto dydžio, prieiga pagal indeksą.
      • Array (bazinė klasė)
      • T[] (sintaksinis cukrus masyvams)
    • Žodynai (Dictionaries): Rinkiniai porų raktas-reikšmė, prieiga per raktą.
      • Hashtable (be tipo)
      • Dictionary<TKey, TValue> (tipizuotas)
      • SortedList (be tipo, surūšiuotas pagal raktą)
      • SortedList<TKey, TValue> (tipizuotas, surūšiuotas pagal raktą)
      • SortedDictionary<TKey, TValue> (tipizuotas, surūšiuotas pagal raktą, naudoja raudonai-juodą medį)
    • Rinkiniai (Sets): Unikalūs elementų rinkiniai.
      • HashSet<T> (tipizuotas, nesurūšiuotas)
      • SortedSet<T> (tipizuotas, surūšiuotas)
    • Eilės (Queues): Kolekcijos, veikiančios pagal "pirmas atėjo, pirmas išeina" (FIFO).
      • Queue (be tipo)
      • Queue<T> (tipizuotas)
    • Stakos (Stacks): Kolekcijos, veikiančios pagal "paskutinis atėjo, pirmas išeina" (LIFO).
      • Stack (be tipo)
      • Stack<T> (tipizuotas)
  3. Srauto saugumo požiūriu:

    • Ne-saugios (Non-thread-safe): Dauguma standartinių kolekcijų (System.Collections, System.Collections.Generic). Reikalauja išorinės sinchronizacijos daugiasrautei veiklai.
    • Saugios (Concurrent): Sukurtos saugiai veikti daugiasraute be išorinės blokavimo (System.Collections.Concurrent).
      • ConcurrentBag<T>
      • ConcurrentDictionary<TKey, TValue>
      • ConcurrentQueue<T>
      • ConcurrentStack<T>
  4. Keičiamumo požiūriu:

    • Keičiamas (Mutable): Dauguma kolekcijų leidžia pridėti, ištrinti ir keisti elementus.
    • Ne keičiamas (Immutable): Užtikrina nekeitčiamumą po sukūrimo (System.Collections.Immutable). Bet kokia keitimo operacija grąžina naują kolekciją.
      • ImmutableArray<T>
      • ImmutableList<T>
      • ImmutableDictionary<TKey, TValue>
      • ImmutableHashSet<T>
      • ImmutableSortedSet<T>
      • ImmutableQueue<T>
      • ImmutableStack<T>

Konkretus kolekcijos tipo pasirinkimas priklauso nuo užduoties reikalavimų: duomenų tipas, poreikis prieiti per indeksą ar raktą, elementų unikalumo reikalavimai, saugojimo tvarka, našumas, srauto saugumas ir keičiamumas. Moderniame C# dažniausiai naudojamos tipizuotos kolekcijos iš System.Collections.Generic erdvės.