Sobes.tech
Junior

Koje vrste kolekcija postoje u C#?

sobes.tech АИ

Одговор од АИ

C# nudi mnogo tipova kolekcija za skladištenje i upravljanje podacima koji se nalaze u različitim imenim prostorima (uglavnom System.Collections, System.Collections.Generic, System.Collections.Concurrent, System.Collections.Immutable). One se mogu klasifikovati prema nekoliko osnovnih karakteristika:

  1. Po tipu podataka koji se čuva:

    • Bez tipa (Untyped): Čuvaju objekte tipa object (System.Collections). Zahtevaju konverziju tipova i mogu biti manje efikasne.
    • Tipizirane (Generic): Čuvaju objekte određenog tipa (System.Collections.Generic). Obezbeđuju sigurnost tipova i bolju performansu.
  2. Po strukturi podataka:

    • Liste (Lists): Sekvencijalne kolekcije, pristup elementima putem indeksa.
      • ArrayList (bez tipa)
      • List<T> (sa tipom)
      • LinkedList<T> (sa tipom, dvostruko povezani spisak)
    • Nizovi (Arrays): Fiksne veličine, pristup putem indeksa.
      • Array (osnovna klasa)
      • T[] (sintaksički šećer za nizove)
    • Rečnici (Dictionaries): Kolekcije parova ključ-vrednost, pristup putem ključa.
      • Hashtable (bez tipa)
      • Dictionary<TKey, TValue> (sa tipom)
      • SortedList (bez tipa, sortirano po ključu)
      • SortedList<TKey, TValue> (sa tipom, sortirano po ključu)
      • SortedDictionary<TKey, TValue> (sa tipom, sortirano po ključu, koristi crveno-crno stablo)
    • Skupovi (Sets): Kolekcije jedinstvenih elemenata.
      • HashSet<T> (sa tipom, nesortirano)
      • SortedSet<T> (sa tipom, sortirano)
    • Redovi (Queues): Kolekcije koje rade po principu "prvi došao, prvi izašao" (FIFO).
      • Queue (bez tipa)
      • Queue<T> (sa tipom)
    • Stekovi (Stacks): Kolekcije koje rade po principu "poslednji došao, prvi izašao" (LIFO).
      • Stack (bez tipa)
      • Stack<T> (sa tipom)
  3. Po sigurnosti u radu sa nitima:

    • Nezaštićene za niti: Većina standardnih kolekcija (System.Collections, System.Collections.Generic). Zahtevaju spoljašnju sinhronizaciju za višenitnu upotrebu.
    • Sigurne za niti (Concurrent): Dizajnirane za sigurnu rad u višenitnom okruženju bez spoljašnje blokade (System.Collections.Concurrent).
      • ConcurrentBag<T>
      • ConcurrentDictionary<TKey, TValue>
      • ConcurrentQueue<T>
      • ConcurrentStack<T>
  4. Po promenjivosti:

    • Promenljive (Mutable): Većina kolekcija omogućava dodavanje, brisanje i menjanje elemenata.
    • Nepromenljive (Immutable): Obezbeđuju nepromenljivost nakon kreiranja (System.Collections.Immutable). Svaka operacija promene vraća novu kolekciju.
      • ImmutableArray<T>
      • ImmutableList<T>
      • ImmutableDictionary<TKey, TValue>
      • ImmutableHashSet<T>
      • ImmutableSortedSet<T>
      • ImmutableQueue<T>
      • ImmutableStack<T>

Izbor konkretne vrste kolekcije zavisi od zahteva zadatka: tip podataka, potreba za pristupom po indeksu ili ključu, zahtevi za jedinstvenost elemenata, red skladištenja, performanse, sigurnost u radu sa nitima i promenjivost. Najčešće korišćene u savremenom C# su tipizirane kolekcije iz prostora imena System.Collections.Generic.