Sobes.tech
Junior

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:

  1. 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.
  2. 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)
  3. 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>
  4. 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#.