C# ne propose pas de classe directement nommée « HashMap », contrairement à Java. Cependant, sa classe Dictionary<TKey, TValue>
offre des fonctionnalités équivalentes et est l’approche recommandée pour les opérations de hash map.
Table des matières
- Utiliser
Dictionary<TKey, TValue>
comme une Hash Map - Utilisation avancée et considérations
- Conclusion
Utiliser Dictionary<TKey, TValue>
comme une Hash Map
Dictionary<TKey, TValue>
offre un stockage clé-valeur avec une complexité temporelle moyenne de O(1) pour les opérations courantes telles que l’insertion, la suppression et la récupération. TKey
spécifie le type de clé, et TValue
définit le type de valeur associé. Explorons son utilisation :
Création et remplissage d’un dictionnaire :
// Créer un dictionnaire pour stocker des chaînes de caractères comme clés et des entiers comme valeurs.
Dictionary<string, int> myDictionary = new Dictionary<string, int>();
// Ajouter des paires clé-valeur en utilisant Add()
myDictionary.Add("apple", 1);
myDictionary.Add("banana", 2);
myDictionary.Add("cherry", 3);
// Ou utiliser la syntaxe d'initialiseur de collection :
Dictionary<string, int> anotherDictionary = new Dictionary<string, int>()
{
{"grape", 4},
{"orange", 5}
};
Accès aux valeurs :
Récupérez les valeurs en utilisant leurs clés. TryGetValue()
est plus sûr que l’indexation directe, gérant les cas où la clé est absente :
int appleCount;
if (myDictionary.TryGetValue("apple", out appleCount))
{
Console.WriteLine($"Nombre de pommes : {appleCount}"); // Sortie : Nombre de pommes : 1
}
else
{
Console.WriteLine("Pomme non trouvée.");
}
// Accès direct (lance une KeyNotFoundException si la clé est manquante)
try
{
Console.WriteLine($"Nombre de bananes : {myDictionary["banana"]}"); // Sortie : Nombre de bananes : 2
}
catch (KeyNotFoundException)
{
Console.WriteLine("Clé non trouvée.");
}
Itération sur un dictionnaire :
Console.WriteLine("Contenu du dictionnaire :");
foreach (KeyValuePair<string, int> kvp in myDictionary)
{
Console.WriteLine($"Clé : {kvp.Key}, Valeur : {kvp.Value}");
}
Suppression d’éléments :
myDictionary.Remove("banana");
Vérification de l’existence d’une clé :
if (myDictionary.ContainsKey("cherry"))
{
Console.WriteLine("Cerise existe.");
}
Utilisation avancée et considérations
Pour les scénarios nécessitant la sécurité des threads, considérez ConcurrentDictionary<TKey, TValue>
. Lors du choix des clés, assurez-vous qu’elles implémentent correctement GetHashCode()
et Equals()
pour éviter les collisions et maintenir l’efficacité de la hash map. La compréhension de ces aspects est cruciale pour des performances optimales.
Conclusion
Dictionary<TKey, TValue>
en C# est l’équivalent efficace d’une HashMap, offrant d’excellentes performances pour le stockage clé-valeur. Sa polyvalence, combinée à la disponibilité d’alternatives thread-safe, en fait une structure de données fondamentale pour diverses applications C#.