C# não oferece uma classe diretamente nomeada “HashMap”, ao contrário de Java. No entanto, sua classe Dictionary<TKey, TValue>
fornece funcionalidade equivalente e é a abordagem recomendada para operações de hash map.
Sumário
Usando Dictionary<TKey, TValue>
como um Hash Map
Dictionary<TKey, TValue>
oferece um armazenamento chave-valor com complexidade de tempo média O(1) para operações comuns como inserção, exclusão e recuperação. TKey
especifica o tipo da chave, e TValue
define o tipo de valor associado. Vamos explorar seu uso:
Criando e Populando um Dictionary:
// Crie um dicionário para armazenar strings como chaves e inteiros como valores.
Dictionary<string, int> myDictionary = new Dictionary<string, int>();
// Adicione pares chave-valor usando Add()
myDictionary.Add("apple", 1);
myDictionary.Add("banana", 2);
myDictionary.Add("cherry", 3);
// Ou use a sintaxe de inicializador de coleção:
Dictionary<string, int> anotherDictionary = new Dictionary<string, int>()
{
{"grape", 4},
{"orange", 5}
};
Acessando Valores:
Recupere valores usando suas chaves. TryGetValue()
é mais seguro que indexação direta, tratando casos em que a chave está ausente:
int appleCount;
if (myDictionary.TryGetValue("apple", out appleCount))
{
Console.WriteLine($"Contagem de maçãs: {appleCount}"); // Saída: Contagem de maçãs: 1
}
else
{
Console.WriteLine("Maçã não encontrada.");
}
// Acesso direto (lança KeyNotFoundException se a chave estiver faltando)
try
{
Console.WriteLine($"Contagem de bananas: {myDictionary["banana"]}"); // Saída: Contagem de bananas: 2
}
catch (KeyNotFoundException)
{
Console.WriteLine("Chave não encontrada.");
}
Iterando Através de um Dictionary:
Console.WriteLine("Conteúdo do dicionário:");
foreach (KeyValuePair<string, int> kvp in myDictionary)
{
Console.WriteLine($"Chave: {kvp.Key}, Valor: {kvp.Value}");
}
Removendo Elementos:
myDictionary.Remove("banana");
Verificando a Existência da Chave:
if (myDictionary.ContainsKey("cherry"))
{
Console.WriteLine("Cereja existe.");
}
Uso Avançado e Considerações
Para cenários que exigem segurança de thread, considere ConcurrentDictionary<TKey, TValue>
. Ao escolher chaves, certifique-se de que elas implementem GetHashCode()
e Equals()
corretamente para evitar colisões e manter a eficiência do hash map. Entender esses aspectos é crucial para o desempenho ideal.
Conclusão
Dictionary<TKey, TValue>
em C# é o equivalente eficaz de um HashMap, fornecendo excelente desempenho para armazenamento chave-valor. Sua versatilidade, combinada com a disponibilidade de alternativas thread-safe, o torna uma estrutura de dados fundamental para diversas aplicações C#.