Sobes.tech
Junior

Milyen típusú gyűjtemények léteznek a C#-ban?

sobes.tech MI

Válasz az MI-től

A C# számos kollekciótípust kínál az adatok tárolására és kezelésére, amelyek különböző névterekben találhatók (főként System.Collections, System.Collections.Generic, System.Collections.Concurrent, System.Collections.Immutable). Ezeket néhány fő jellemző szerint lehet osztályozni:

  1. Tárolt adatok típusa szerint:

    • Típus nélküli (Untyped): Objektumokat object típusban tárol (System.Collections). Típuskonverziót igényelnek, és kevésbé lehetnek hatékonyak.
    • Típusos (Generic): Meghatározott típusú objektumokat tárolnak (System.Collections.Generic). Típusbiztonságot és jobb teljesítményt nyújtanak.
  2. Adatszerkezet szerint:

    • Listák (Lists): Sorozatos kollekciók, elemekhez index segítségével hozzáférés.
      • ArrayList (típus nélküli)
      • List<T> (típusos)
      • LinkedList<T> (típusos, kétszálú láncolt lista)
    • Tömbök (Arrays): Fix méretűek, index szerint elérhetők.
      • Array (alap osztály)
      • T[] (szintaktikus cukor tömbökhöz)
    • Szótárak (Dictionaries): Kulcs-érték párok kollekciója, kulcs szerint elérhető.
      • Hashtable (típus nélküli)
      • Dictionary<TKey, TValue> (típusos)
      • SortedList (típus nélküli, kulcs szerint rendezett)
      • SortedList<TKey, TValue> (típusos, kulcs szerint rendezett)
      • SortedDictionary<TKey, TValue> (típusos, kulcs szerint rendezett, vörös-fekete fa)
    • Halmazok (Sets): Egyedi elemek kollekciója.
      • HashSet<T> (típusos, rendezés nélküli)
      • SortedSet<T> (típusos, rendezett)
    • Sorok (Queues): "Elsőként érkezett, elsőként távozó" elv szerint működő kollekciók (FIFO).
      • Queue (típus nélküli)
      • Queue<T> (típusos)
    • Veremek (Stacks): "Utolsóként érkezett, elsőként távozó" elv szerint működő kollekciók (LIFO).
      • Stack (típus nélküli)
      • Stack<T> (típusos)
  3. Szálbiztonság szerint:

    • Nem szálbiztosak: A legtöbb standard kollekció (System.Collections, System.Collections.Generic). Külső szinkronizációt igényel több szálon történő használathoz.
    • Szálbiztosak (Concurrent): Biztonságos működés több szálon belül külső zárolás nélkül (System.Collections.Concurrent).
      • ConcurrentBag<T>
      • ConcurrentDictionary<TKey, TValue>
      • ConcurrentQueue<T>
      • ConcurrentStack<T>
  4. Változtathatóság szerint:

    • Változtatható (Mutable): A legtöbb kollekció lehetővé teszi elemek hozzáadását, törlését és módosítását.
    • Változatlan (Immutable): A létrehozás után nem változik (System.Collections.Immutable). Minden módosító művelet új kollekciót ad vissza.
      • ImmutableArray<T>
      • ImmutableList<T>
      • ImmutableDictionary<TKey, TValue>
      • ImmutableHashSet<T>
      • ImmutableSortedSet<T>
      • ImmutableQueue<T>
      • ImmutableStack<T>

A konkrét kollekció típus kiválasztása a feladat követelményeitől függ: adat típusa, index vagy kulcs szerinti hozzáférés szükségessége, elemek egyediségének követelménye, tárolási sorrend, teljesítmény, szálbiztonság és változtathatóság. A modern C#-ban leggyakrabban használt típusok a System.Collections.Generic névtérben található típusos kollekciók.