Sobes.tech
Junior

¿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:

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