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:
-
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.
- Bez typu (Untyped): Ukladajú objekty typu
-
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)
- Zoznamy (Lists): Sekvenčné kolekcie, prístup k prvkom pomocou indexu.
-
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>
- Nezabezpečené pre vlákna: Väčšina štandardných kolekcií (
-
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.