Sobes.tech
Junior

Aké typy kolekcií existujú v C#?

sobes.tech AI

Odpoveď od AI

C# ponúka množstvo typov kolekcií na ukladanie a správu údajov, ktoré sa nachádzajú v rôznych menných priestoroch (hlavne System.Collections, System.Collections.Generic, System.Collections.Concurrent, System.Collections.Immutable). Ich možno klasifikovať podľa niekoľkých hlavných znakov:

  1. Podľa typu ukladaných údajov:

    • Bez typu (Untyped): Ukladajú objekty typu object (System.Collections). Vyžadujú konverziu typov a môžu byť menej efektívne.
    • Typizované (Generic): Ukladajú objekty určitého typu (System.Collections.Generic). Zabezpečujú bezpečnosť typov a lepší výkon.
  2. Podľa štruktúry údajov:

    • Zoznamy (Lists): Sekvenčné kolekcie, prístup k prvkom pomocou indexu.
      • ArrayList (bez typu)
      • List<T> (s typom)
      • LinkedList<T> (s typom, dvojzväzkový zoznam)
    • Poľia (Arrays): Fixnej veľkosti, prístup pomocou indexu.
      • Array (základná trieda)
      • T[] (syntaktický cukor pre poľia)
    • Slovníky (Dictionaries): Kolekcie párov kľúč-hodnota, prístup pomocou kľúča.
      • Hashtable (bez typu)
      • Dictionary<TKey, TValue> (s typom)
      • SortedList (bez typu, zoradené podľa kľúča)
      • SortedList<TKey, TValue> (s typom, zoradené podľa kľúča)
      • SortedDictionary<TKey, TValue> (s typom, zoradené podľa kľúča, používa červenú-čiernu stromovú štruktúru)
    • Množiny (Sets): Kolekcie unikátnych prvkov.
      • HashSet<T> (s typom, neusporiadané)
      • SortedSet<T> (s typom, zoradené)
    • Fronty (Queues): Kolekcie, ktoré fungujú podľa princípu "prvý prišiel, prvý odišiel" (FIFO).
      • Queue (bez typu)
      • Queue<T> (s typom)
    • Zásobníky (Stacks): Kolekcie, ktoré fungujú podľa princípu "posledný prišiel, prvý odišiel" (LIFO).
      • Stack (bez typu)
      • Stack<T> (s typom)
  3. Podľa bezpečnosti pri práci s vláknami:

    • Nezabezpečené pre vlákna: Väčšina štandardných kolekcií (System.Collections, System.Collections.Generic). Vyžadujú externú synchronizáciu pre viacvláknové použitie.
    • Bezpečné pre vlákna (Concurrent): Navrhnuté pre bezpečnú prácu v viacvláknovom prostredí bez vonkajšieho zámku (System.Collections.Concurrent).
      • ConcurrentBag<T>
      • ConcurrentDictionary<TKey, TValue>
      • ConcurrentQueue<T>
      • ConcurrentStack<T>
  4. Podľa zmeniteľnosti:

    • Zmeniteľné (Mutable): Väčšina kolekcií umožňuje pridávanie, odstraňovanie a úpravu prvkov.
    • Nezmeniteľné (Immutable): Zabezpečujú nemennosť po vytvorení (System.Collections.Immutable). Akákoľvek operácia zmeny vracia novú kolekciu.
      • ImmutableArray<T>
      • ImmutableList<T>
      • ImmutableDictionary<TKey, TValue>
      • ImmutableHashSet<T>
      • ImmutableSortedSet<T>
      • ImmutableQueue<T>
      • ImmutableStack<T>

Výber konkrétneho typu kolekcie závisí od požiadaviek úlohy: typ údajov, potreba prístupu podľa indexu alebo kľúča, požiadavky na jedinečnosť prvkov, poradie uloženia, výkon, bezpečnosť pri práci s vláknami a zmeniteľnosť. Najčastejšie používané v modernom C# sú typizované kolekcie z priestoru mien System.Collections.Generic.