Pular para o conteúdo
.NETList, Dictionary e HashSet
Módulo 01Fundamentos da Plataforma e da Linguagem

List, Dictionary e HashSet

intermediario 28 min de leitura·Atualizado · .NET 9
Resumo

List<T> guarda itens em ordem; Dictionary<K,V> mapeia chave→valor com busca rápida; HashSet<T> guarda itens únicos. Escolher a coleção certa muda clareza e desempenho.

1. Objetivos de Aprendizagem#

  • Usar as três coleções mais comuns do .NET.
  • Escolher a estrutura adequada ao problema.
  • Conhecer o custo de operações típicas.

2. Pré-requisitos#

  • Classes e interfaces (Módulo 05).

3. Conceito#

  • List<T>: sequência ordenada e indexável. Adicionar ao fim é rápido; buscar por conteúdo percorre a lista.
  • Dictionary<TKey,TValue>: tabela hash chave→valor. Busca/inserção por chave são muito rápidas (tempo praticamente constante), mas sem ordem garantida.
  • HashSet<T>: conjunto de itens únicos, com verificação de pertencimento rápida.

O porquê de escolher bem: usar List para buscas por chave frequentes vira gargalo; um Dictionary resolve em uma linha.

4. Mão na Massa#

4.1. Setup#

Shell
dotnet new console -n Catalog.Colecoes
cd Catalog.Colecoes

4.2. Implementação Passo a Passo#

  1. List<T>:
C#
var produtos = new List<string> { "Mouse", "Teclado" };
produtos.Add("Monitor");
produtos.RemoveAt(0);
Console.WriteLine(produtos.Count);      // 2
Console.WriteLine(produtos[0]);         // "Teclado"
  1. Dictionary<K,V>:
C#
var precos = new Dictionary<string, decimal>
{
    ["Mouse"] = 90m,
    ["Teclado"] = 120m
};
if (precos.TryGetValue("Mouse", out var preco))
    Console.WriteLine(preco);           // 90
precos["Monitor"] = 1200m;              // adiciona/atualiza
  1. HashSet<T>:
C#
var tags = new HashSet<string> { "novo", "promo" };
Console.WriteLine(tags.Add("novo"));    // False (já existe)
Console.WriteLine(tags.Contains("promo")); // True

4.3. Executando#

Shell
dotnet run

5. Exemplo Completo#

Para consultar preços por nome de produto, Dictionary<string, decimal> com TryGetValue é a escolha idiomática — evita percorrer uma lista a cada consulta.

6. Boas Práticas e Armadilhas#

FaçaEvite
Dictionary para busca por chavePercorrer List repetidamente procurando por chave
TryGetValue para acesso seguroAcessar dict[chave] inexistente (lança KeyNotFoundException)
HashSet para unicidade e pertencimentoList.Contains em coleções grandes (lento)
Atenção

Dictionary e HashSet não garantem ordem de iteração. Se precisar de ordem, use List ou ordene explicitamente.

7. Segurança e Produção#

  • As coleções padrão não são thread-safe. Para acesso concorrente, use System.Collections.Concurrent (ex.: ConcurrentDictionary).

8. Exercícios#

  • Fácil: monte uma List de nomes e imprima cada um.
  • Médio: use um Dictionary para contar ocorrências de palavras.
  • Desafio: dado duas listas, use HashSet para achar os itens em comum.

9. Resumo#

List<T> (ordem/índice), Dictionary<K,V> (busca por chave), HashSet<T> (unicidade). Escolha pela operação dominante; use TryGetValue e lembre-se de que não são thread-safe.

10. Próximos Passos#

A seguir, o mecanismo por trás delas: generics.

11. Referências#

07-01 — List, Dictionary e HashSet | Curso ASP.NET Core