C# Academy · Aula

Escolhendo uma coleção

Compromissos e desempenho.

Aula 4 de 413 etapas

Escolhendo uma coleção é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.

Primeiro, uma pergunta

Escolher uma coleção começa com uma pergunta: como você acessará os dados? Por posição, por chave ou apenas verificando o pertencimento?

List, Dictionary e HashSet respondem, cada um, a um padrão de acesso diferente. Combine a ferramenta com o padrão para manter seu código rápido e claro.

Acesso por posição: lista

Se a ordem for importante e você acessar os itens por índice, escolha List<T>. Ela mantém a ordem de inserção e oferece indexação O(1).

Exemplos: uma fila de steps, linhas na ordem de exibição ou qualquer sequência que você percorra do início ao fim. Duplicatas são permitidas.

var steps = new List<string> { "mix", "bake", "cool" };
string first = steps[0]; // O(1) by index

Acesso por chave: dicionário

Se você pesquisar itens por um identificador exclusivo, escolha Dictionary<K,V>. Ele mapeia uma chave para um valor em O(1) em média.

Exemplos: id de usuário para usuário, código de país para nome e palavra para sua contagem. A chave responde a «qual deles»; o valor transporta os dados.

var users = new Dictionary<int, string> {
    [101] = "Ann",
    [102] = "Bob"
};
string name = users[101];

Pertencimento e exclusividade: HashSet

Se você só precisa saber se um valor está presente ou precisa rejeitar duplicatas, escolha HashSet<T>. Contains tem custo O(1) em média.

Exemplos: visited URLs, permissões permitidas e tags distintas. Não há um valor associado, apenas a presença do elemento.

var visited = new HashSet<string>();
if (visited.Add(url)) {
    // first time seeing this url
}

A tabela de custos

Custos médios: a indexação de uma List custa O(1), mas Contains custa O(n). A pesquisa em um Dictionary e em um HashSet custa O(1).

List.Add no final custa O(1) amortizado; inserir ou remover no meio custa O(n). Adicionar e remover em um dicionário e em um HashSet custa O(1) em média.

// List:       index O(1),  Contains O(n)
// Dictionary: by-key O(1), no index
// HashSet:    Contains O(1), no value, no index

Contains em uma lista é um sinal de alerta

Chamar repetidamente list.Contains dentro de um laço é uma armadilha O(n ao quadrado). Cada verificação percorre a lista inteira.

Se as verificações de pertencimento predominarem, troque para um HashSet. Essa única mudança pode transformar um laço lento em um instantâneo com dados grandes.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var allow = new HashSet<int> { 2, 4, 6 };
        foreach (int n in new[] { 1, 2, 3, 4 })
            if (allow.Contains(n)) Console.Write(n + " ");
    }
}

Quando você precisa de chave e ordem

Precisa de uma pesquisa por chave, mas também de uma ordem previsível? O Dictionary padrão não garante uma ordem.

Considere manter uma lista para a ordem junto de um dicionário para a pesquisa, ou use SortedDictionary<K,V> para manter as chaves em ordem sorted, ao custo de O(log n).

var sorted = new SortedDictionary<string, int>();
sorted["b"] = 2;
sorted["a"] = 1;
// enumerates a then b, in key order

Compromissos de memória

Coleções baseadas em dispersão trocam memória por velocidade. Dictionary e HashSet mantêm compartimentos internos, usando mais memória do que uma List compacta ou uma matriz.

Para coleções pequenas, com poucos itens, percorrer uma List pode ser perfeitamente adequado e usar menos memória. A dispersão compensa em grande escala.

Program para interfaces

As assinaturas de métodos devem solicitar o tipo menos específico que funcione. Aceite IEnumerable<T> para leitura, IReadOnlyList<T> para leituras indexadas e IDictionary<K,V> para acesso por chave.

Isso desacopla os chamadores da sua escolha concreta, permitindo trocar implementações mais tarde sem quebrar as assinaturas.

int Sum(IEnumerable<int> values) {
    int total = 0;
    foreach (int v in values) total += v;
    return total;
}

Um exemplo prático

Contar palavras unique em um texto usa duas coleções juntas. Um HashSet acompanha palavras seen; um dicionário contabiliza as ocorrências.

Cada um faz uma tarefa bem: o set garante exclusividade, o dicionário mapeia a palavra para sua frequência, e ambos oferecem custo O(1) em média por operação.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var counts = new Dictionary<string, int>();
        foreach (var w in "a b a c b a".Split(' '))
            counts[w] = counts.GetValueOrDefault(w) + 1;
        Console.WriteLine(counts["a"]); // 3
    }
}

Lista de verificação para decisão

Pergunte na ordem: preciso de um mapa de chave para valor? Use um dicionário. Preciso apenas de exclusividade ou pertencimento? Use um HashSet.

Caso contrário, preciso de ordem e acesso por índice, possivelmente com duplicatas? Use uma lista. Esta breve lista de verificação cobre a maioria dos casos cotidianos.

Verificação rápida

Aplique a lista de verificação para decisão a uma necessidade concreta.

Recapitulação

Escolha pelo padrão de acesso: List para sequências ordenadas e indexadas; Dictionary para pesquisas de chave para valor; HashSet para exclusividade e pertencimento.

Observe a complexidade: evite List.Contains em laços críticos, aproveite pesquisas por dispersão O(1) e programe para interfaces para manter sua escolha flexível.

Grátis para começar

Aprenda C# com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
93
Aulas
346

Perguntas Frequentes

A aula “Escolhendo uma coleção” é grátis?

Sim — o texto completo de “Escolhendo uma coleção” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.

O que vou aprender em “Escolhendo uma coleção”?

Compromissos e desempenho. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Escolhendo uma coleção”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. List na prática
  2. Pesquisas em dicionários
  3. HashSet e exclusividade
  4. Escolhendo uma coleção
← Voltar para C# Academy