¿Qué tipos de colecciones existen en C#?
sobes.tech AI
Respuesta de la IA
C# ofrece una variedad de tipos de colecciones para almacenar y gestionar datos, ubicados en diferentes espacios de nombres (principalmente System.Collections, System.Collections.Generic, System.Collections.Concurrent, System.Collections.Immutable). Se pueden clasificar según varios criterios principales:
-
Por tipo de datos almacenados:
- No tipados (Untyped): Almacenan objetos del tipo
object(System.Collections). Requieren conversión de tipos y pueden ser menos eficientes. - Tipados (Generic): Almacenan objetos de un tipo específico (
System.Collections.Generic). Ofrecen seguridad de tipos y mejor rendimiento.
- No tipados (Untyped): Almacenan objetos del tipo
-
Por estructura de datos:
- Listas (Lists): Colecciones secuenciales, acceso a elementos por índice.
ArrayList(no tipado)List<T>(tipado)LinkedList<T>(lista doblemente enlazada tipada)
- Arreglos (Arrays): De tamaño fijo, acceso por índice.
Array(clase base)T[](azúcar sintáctico para arreglos)
- Diccionarios (Dictionaries): Colecciones de pares clave-valor, acceso por clave.
Hashtable(no tipado)Dictionary<TKey, TValue>(tipado)SortedList(no tipado, ordenado por clave)SortedList<TKey, TValue>(tipado, ordenado por clave)SortedDictionary<TKey, TValue>(tipado, ordenado por clave, usa árbol rojo-negro)
- Conjuntos (Sets): Colecciones de elementos únicos.
HashSet<T>(tipado, no ordenado)SortedSet<T>(tipado, ordenado)
- Colas (Queues): Colecciones que funcionan bajo el principio de "el primero en entrar, el primero en salir" (FIFO).
Queue(no tipado)Queue<T>(tipado)
- Pilas (Stacks): Colecciones que funcionan bajo el principio de "el último en entrar, el primero en salir" (LIFO).
Stack(no tipado)Stack<T>(tipado)
- Listas (Lists): Colecciones secuenciales, acceso a elementos por índice.
-
Por seguridad en hilos:
- No seguros para hilos: La mayoría de las colecciones estándar (
System.Collections,System.Collections.Generic). Requieren sincronización externa para trabajo multihilo. - Seguras para hilos (Concurrent): Diseñadas para trabajar de forma segura en entornos multihilo sin bloqueo externo (
System.Collections.Concurrent).ConcurrentBag<T>ConcurrentDictionary<TKey, TValue>ConcurrentQueue<T>ConcurrentStack<T>
- No seguros para hilos: La mayoría de las colecciones estándar (
-
Por mutabilidad:
- Mutables: La mayoría de las colecciones permiten agregar, eliminar y modificar elementos.
- Inmutables: Garantizan inmutabilidad después de la creación (
System.Collections.Immutable). Cualquier operación de modificación devuelve una nueva colección.ImmutableArray<T>ImmutableList<T>ImmutableDictionary<TKey, TValue>ImmutableHashSet<T>ImmutableSortedSet<T>ImmutableQueue<T>ImmutableStack<T>
La elección de un tipo específico de colección depende de los requisitos de la tarea: tipo de datos, necesidad de acceso por índice o clave, requisitos de unicidad de elementos, orden de almacenamiento, rendimiento, seguridad en hilos y mutabilidad. En la actualidad, las colecciones tipadas del espacio de nombres System.Collections.Generic son las más utilizadas en C#.