Sobes.tech
Junior

Quais são os tipos de coleções em C#?

sobes.tech IA

Resposta da IA

A C# oferece uma variedade de tipos de coleções para armazenar e gerir dados, localizados em diferentes espaços de nomes (principalmente System.Collections, System.Collections.Generic, System.Collections.Concurrent, System.Collections.Immutable). Podem ser classificados por vários critérios principais:

  1. Por tipo de dados armazenados:

    • Não tipados (Untyped): Armazenam objetos do tipo object (System.Collections). Requerem conversão de tipos e podem ser menos eficientes.
    • Tipados (Generic): Armazenam objetos de um tipo específico (System.Collections.Generic). Oferecem segurança de tipos e melhor desempenho.
  2. Por estrutura de dados:

    • Listas (Lists): Coleções sequenciais, acesso aos elementos por índice.
      • ArrayList (não tipado)
      • List<T> (tipado)
      • LinkedList<T> (lista duplamente ligada tipada)
    • Arrays: De tamanho fixo, acesso por índice.
      • Array (classe base)
      • T[] (açúcar sintático para arrays)
    • Dicionários: Coleções de pares chave-valor, acesso por chave.
      • Hashtable (não tipado)
      • Dictionary<TKey, TValue> (tipado)
      • SortedList (não tipado, ordenado por chave)
      • SortedList<TKey, TValue> (tipado, ordenado por chave)
      • SortedDictionary<TKey, TValue> (tipado, ordenado por chave, usa árvore vermelho-preto)
    • Conjuntos (Sets): Coleções de elementos únicos.
      • HashSet<T> (tipado, não ordenado)
      • SortedSet<T> (tipado, ordenado)
    • Filas (Queues): Coleções que funcionam pelo princípio de "primeiro a chegar, primeiro a sair" (FIFO).
      • Queue (não tipado)
      • Queue<T> (tipado)
    • Pilhas (Stacks): Coleções que funcionam pelo princípio de "último a chegar, primeiro a sair" (LIFO).
      • Stack (não tipado)
      • Stack<T> (tipado)
  3. Por segurança em multithreading:

    • Não seguros para threads: A maioria das coleções padrão (System.Collections, System.Collections.Generic). Requer sincronização externa para trabalho multithread.
    • Seguros para threads (Concurrent): Projetadas para trabalhar de forma segura em ambientes multithread sem bloqueio externo (System.Collections.Concurrent).
      • ConcurrentBag<T>
      • ConcurrentDictionary<TKey, TValue>
      • ConcurrentQueue<T>
      • ConcurrentStack<T>
  4. Por mutabilidade:

    • Mutáveis (Mutable): A maioria das coleções permite adicionar, remover e modificar elementos.
    • Imutáveis (Immutable): Garantem imutabilidade após a criação (System.Collections.Immutable). Qualquer operação de modificação retorna uma nova coleção.
      • ImmutableArray<T>
      • ImmutableList<T>
      • ImmutableDictionary<TKey, TValue>
      • ImmutableHashSet<T>
      • ImmutableSortedSet<T>
      • ImmutableQueue<T>
      • ImmutableStack<T>

A escolha de um tipo específico de coleção depende dos requisitos da tarefa: tipo de dados, necessidade de acesso por índice ou chave, requisitos de unicidade dos elementos, ordem de armazenamento, desempenho, segurança em multithreading e mutabilidade. As coleções tipadas do espaço de nomes System.Collections.Generic são as mais utilizadas atualmente em C#.