Welke soorten collecties zijn er in C#?
sobes.tech AI
Antwoord van AI
C# biedt een breed scala aan collectie-typen voor het opslaan en beheren van gegevens, die zich in verschillende naamruimtes bevinden (voornamelijk System.Collections, System.Collections.Generic, System.Collections.Concurrent, System.Collections.Immutable). Ze kunnen worden geclassificeerd op basis van verschillende hoofdkenmerken:
-
Volgens het type opgeslagen gegevens:
- Ongetypeerd (Untyped): Opslaan objecten van het type
object(System.Collections). Vereist typeconversie en kan minder efficiënt zijn. - Getypeerd (Generic): Opslaan objecten van een specifiek type (
System.Collections.Generic). Bieden typeveiligheid en betere prestaties.
- Ongetypeerd (Untyped): Opslaan objecten van het type
-
Volgens datastructuur:
- Lijsten (Lists): Sequentiële collecties, toegang tot elementen via index.
ArrayList(ongetypeerd)List<T>(getypeerd)LinkedList<T>(getypeerde dubbel gekoppelde lijst)
- Arrays: Van vaste grootte, toegang via index.
Array(basisklasse)T[](synthaxsuiker voor arrays)
- Woordenboeken (Dictionaries): Paren van sleutel-waarde, toegang via sleutel.
Hashtable(ongetypeerd)Dictionary<TKey, TValue>(getypeerd)SortedList(ongetypeerd, gesorteerd op sleutel)SortedList<TKey, TValue>(getypeerd, gesorteerd op sleutel)SortedDictionary<TKey, TValue>(getypeerd, gesorteerd op sleutel, gebruikt rood-zwart boom)
- Sets: Collecties van unieke elementen.
HashSet<T>(getypeerd, ongeordend)SortedSet<T>(getypeerd, geordend)
- Queues: Collecties die werken volgens het principe "eerste binnen, eerste buiten" (FIFO).
Queue(ongetypeerd)Queue<T>(getypeerd)
- Stacks: Collecties die werken volgens het principe "laatste binnen, eerste buiten" (LIFO).
Stack(ongetypeerd)Stack<T>(getypeerd)
- Lijsten (Lists): Sequentiële collecties, toegang tot elementen via index.
-
Volgens threadveiligheid:
- Niet thread-veilig: De meeste standaardcollecties (
System.Collections,System.Collections.Generic). Vereist externe synchronisatie voor multithread-werking. - Thread-veilig (Concurrent): Ontworpen voor veilige werking in multithread-omgevingen zonder externe blokkering (
System.Collections.Concurrent).ConcurrentBag<T>ConcurrentDictionary<TKey, TValue>ConcurrentQueue<T>ConcurrentStack<T>
- Niet thread-veilig: De meeste standaardcollecties (
-
Volgens mutabiliteit:
- Aanpasbaar (Mutable): De meeste collecties staan toe elementen toe te voegen, verwijderen en te wijzigen.
- Onveranderlijk (Immutable): Garandeert onveranderlijkheid na creatie (
System.Collections.Immutable). Elke wijzigingsoperatie retourneert een nieuwe collectie.ImmutableArray<T>ImmutableList<T>ImmutableDictionary<TKey, TValue>ImmutableHashSet<T>ImmutableSortedSet<T>ImmutableQueue<T>ImmutableStack<T>
De keuze van een specifiek collectie-type hangt af van de eisen van de taak: gegevenssoort, behoefte aan toegang via index of sleutel, vereisten voor uniekheid van elementen, opslagvolgorde, prestaties, threadveiligheid en mutabiliteit. Momenteel worden getypeerde collecties uit de namespace System.Collections.Generic het meest gebruikt in C#.