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:
-
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.
- Bez tipa (Untyped): Čuvaju objekte tipa
-
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)
- Liste (Lists): Sekvencijalne kolekcije, pristup elementima putem indeksa.
-
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>
- Nezaštićene za niti: Većina standardnih kolekcija (
-
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.