English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Hashtable en C# (Table de hachage)

Hashtable est une collection non générique stockant des paires clé-valeur, similaire à la collection Dictionary<TKey, TValue> générique. Elle optimise la recherche en calculant le code haché de chaque clé et en le stockant dans des buckets différents, puis en correspondant au code haché de la clé spécifiée lors de l'accès aux valeurs.

Caractéristiques de la Hashtable

  • Hashtable stocke des paires clé-valeur.

  • Appartient à l'espace de noms System.Collection.

  • Implémente l'interface IDictionary.

  • Les clés doivent être uniques et ne peuvent pas être null.

  • Les valeurs peuvent être null ou répétées.

  • Il est possible d'accéder aux valeurs en passant des clés pertinentes dans l'indexeur, par exemple myHashtable[key]

  • Les éléments sont stockés sous forme d'objets DictionaryEntry.

Créer une table de hachage (HashTable)

L'exemple suivant montre comment créer une table de hachage et ajouter des éléments.

Hashtable numberNames = new Hashtable();
numberNames.Add(1,"Un"); //Ajouter la clé en utilisant la méthode Add()/Valeur
numberNames.Add(2,"Deux");
numberNames.Add(3,"Trois");
//Les suivantes provoquent des exceptions de temps : clé déjà ajoutée. run-exception de temps : clé déjà ajoutée.
//numberNames.Add(3, "Trois"); 
foreach(DictionaryEntry de in numberNames)
    Console.WriteLine("Clé: {0}, Valeur: {1}
//Utilisation de collection-Syntaxe initializer pour créer une Hashtable
var cities = new Hashtable(){
	{"Royaume-Uni", "London, Manchester, Birmingham"},
	{"USA", "Chicago, New York, Washington"},
	{"Inde", "Mumbai, New Delhi, Pune"}
};
foreach(DictionaryEntry de in cities)
    Console.WriteLine("Clé: {0}, Valeur: {1}

La collection Hashtable peut inclure tous les éléments du dictionnaire, comme suit.

Dictionary<int, string> dict = new Dictionary<int, string>();
dict.Add(1, "un");
dict.Add(2, "deux");
dict.Add(3, "trois");
Hashtable ht = new Hashtable(dict);

Mise à jour de la table de hachage

Il est possible de récupérer la valeur d'une clé existante dans la Hashtable en passant une clé dans l'indexeur. La Hashtable n'est pas générique, donc une conversion forcée est nécessaire lors de la récupération.

//Utilisation de collection-Syntaxe initializer pour créer une Hashtable
var cities = new Hashtable(){
	{"Royaume-Uni", "London, Manchester, Birmingham"},
	{"USA", "Chicago, New York, Washington"},
	{"Inde", "Mumbai, New Delhi, Pune"}
};
    
string citiesOfUK = (string) cities["UK"]; //Conversion en chaîne
string citiesOfUSA = (string) cities["USA"]; //Conversion en chaîne
Console.WriteLine(citiesOfUK);
Console.WriteLine(citiesOfUSA);
cities["UK"] = "Liverpool, Bristol"; // Mise à jour de la valeur de UK
cities["USA"] = "Los Angeles, Boston"; //Mise à jour de la valeur de USA
if(!cities.ContainsKey("France")){
    cities["France"] = "Paris";
}

Suppression d'éléments de la table de hachage

La méthode Remove() supprime les éléments correspondant à la valeur spécifiée dans la Hashtable. Si la clé spécifiée n'est pas trouvée dans la Hashtable, une exception KeyNotFoundException est lancée, donc il est nécessaire de vérifier l'existence de la clé actuelle en utilisant la méthode ContainsKey() avant de supprimer.

L'utilisation de la méthode Clear() permet de supprimer tous les éléments en une seule fois.

var cities = new Hashtable(){
	{"Royaume-Uni", "London, Manchester, Birmingham"},
	{"USA", "Chicago, New York, Washington"},
	{"Inde", "Mumbai, New Delhi, Pune"}
};
cities.Remove("UK"); // Supprimer le UK
//Supprimer le Royaume-Uni //Lance une exception en temps de exécution : KeyNotFoundException
if(cities.ContainsKey("France")){ // Vérifiez avant de retirer la clé
    Supprimer le Royaume-Uni
}
cities.Clear(); //Supprimer tous les éléments

Hiérarchie de la classe HashTable

Le schéma de hiérarchie de la classe Hashtable est illustré ci-dessous.

Tableau de hachage C#