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:
-
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.
- Não tipados (Untyped): Armazenam objetos do tipo
-
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)
- Listas (Lists): Coleções sequenciais, acesso aos elementos por índice.
-
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>
- Não seguros para threads: A maioria das coleções padrão (
-
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#.