C# no ofrece una clase llamada directamente «HashMap», a diferencia de Java. Sin embargo, su clase Dictionary<TKey, TValue>
proporciona una funcionalidad equivalente y es el enfoque recomendado para las operaciones de mapa hash.
Tabla de contenido
Usando Dictionary<TKey, TValue>
como un mapa hash
Dictionary<TKey, TValue>
ofrece un almacén de clave-valor con una complejidad de tiempo promedio de O(1) para operaciones comunes como inserción, eliminación y recuperación. TKey
especifica el tipo de clave, y TValue
define el tipo de valor asociado. Exploremos su uso:
Creando y poblando un diccionario:
// Crea un diccionario para almacenar cadenas como claves y enteros como valores.
Dictionary<string, int> myDictionary = new Dictionary<string, int>();
// Agrega pares clave-valor usando Add()
myDictionary.Add("apple", 1);
myDictionary.Add("banana", 2);
myDictionary.Add("cherry", 3);
// O usa la sintaxis de inicializador de colecciones:
Dictionary<string, int> anotherDictionary = new Dictionary<string, int>()
{
{"grape", 4},
{"orange", 5}
};
Accediendo a valores:
Recupera valores usando sus claves. TryGetValue()
es más seguro que el indexado directo, manejando casos donde la clave está ausente:
int appleCount;
if (myDictionary.TryGetValue("apple", out appleCount))
{
Console.WriteLine($"Conteo de manzanas: {appleCount}"); // Salida: Conteo de manzanas: 1
}
else
{
Console.WriteLine("Manzana no encontrada.");
}
// Acceso directo (lanza KeyNotFoundException si la clave falta)
try
{
Console.WriteLine($"Conteo de bananas: {myDictionary["banana"]}"); // Salida: Conteo de bananas: 2
}
catch (KeyNotFoundException)
{
Console.WriteLine("Clave no encontrada.");
}
Iterando a través de un diccionario:
Console.WriteLine("Contenido del diccionario:");
foreach (KeyValuePair<string, int> kvp in myDictionary)
{
Console.WriteLine($"Clave: {kvp.Key}, Valor: {kvp.Value}");
}
Eliminando elementos:
myDictionary.Remove("banana");
Comprobando la existencia de una clave:
if (myDictionary.ContainsKey("cherry"))
{
Console.WriteLine("Cereza existe.");
}
Uso avanzado y consideraciones
Para escenarios que requieren seguridad de subprocesos, considera ConcurrentDictionary<TKey, TValue>
. Al elegir claves, asegúrate de que implementen correctamente GetHashCode()
y Equals()
para evitar colisiones y mantener la eficiencia del mapa hash. Comprender estos aspectos es crucial para un rendimiento óptimo.
Conclusión
Dictionary<TKey, TValue>
en C# es el equivalente efectivo de un HashMap, proporcionando un excelente rendimiento para el almacenamiento de clave-valor. Su versatilidad, combinada con la disponibilidad de alternativas seguras para subprocesos, lo convierte en una estructura de datos fundamental para diversas aplicaciones C#.