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:
-
Tárolt adatok típusa szerint:
- Típus nélküli (Untyped): Objektumokat
objecttí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.
- Típus nélküli (Untyped): Objektumokat
-
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)
- Listák (Lists): Sorozatos kollekciók, elemekhez index segítségével hozzáférés.
-
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>
- Nem szálbiztosak: A legtöbb standard kollekció (
-
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.