Maison  >  Article  >  développement back-end  >  Une brève discussion des exemples de code de Hashtable et Dictionary en C#

Une brève discussion des exemples de code de Hashtable et Dictionary en C#

黄舟
黄舟original
2017-03-09 15:21:121347parcourir

Une brève discussion des exemples de code de Hashtable et Dictionary en C# :

Dictionary Tout d'abord, le type de données stockées

La table de hachage n'est pas générique et n'est pas sécurisée ; le dictionnaire est générique et sécurisé

 ; Les valeurs clés de Hashtable sont toutes de type Objet, mais le type de données des valeurs clés du dictionnaire peut être spécifié.

En d'autres termes, si un type de données autre que Object est stocké dans la table de hachage, lorsque les données sont supprimées, elles doivent être affichées en conversion de type avant de pouvoir être utilisées normalement. Le dictionnaire n'a pas ce problème.

À cet égard, Hashtable est équivalent à Dictionary

Deuxièmement, la cohérence de l'ordre de lecture des données et de l'ordre d'ajout des données
            Hashtable ht = new Hashtable();
            Dictionary<string, int> dic = new Dictionary<string, int>();
            ht.Add("A", 1);
            dic.Add("A", 1);
            //Console.WriteLine(ht["A"]+1);     //编译错误!Object类型不能和int类型直接进行相加。
              Console.WriteLine((int)ht["A"] + 1);//编译通过,输出结果为:2
            Console.WriteLine(dic["A"] + 1);    //编译通过,输出结果为:2

La cohérence de l'ordre de lecture des données dans le dictionnaire et la table de hachage et l'ordre des données lors de l'ajout de données ne peuvent pas être garanties, ou on peut dire qu'il n'y a pas de cohérence.

Le dictionnaire peut garder l'ordre de lecture des données cohérent avec l'ordre lors de l'ajout lors de l'ajout mais pas de la suppression

 ; Mais après les opérations de suppression et d'ajout, il n'est plus garanti que l'ordre de lecture des données soit le même que l'ordre d'ajout.

Dictionary<int, int> dic = new Dictionary<int, int>();
            dic.Add(0, 0);
            dic.Add(1, 1);
            dic.Add(2, 2);

            Console.WriteLine("仅仅经过添加元素处理之后:");

            foreach (KeyValuePair<int, int> kvp in dic)
            {
                Console.WriteLine("Key:" + kvp.Key + " Value:" + kvp.Value);
            }

            dic.Remove(0);
            dic.Add(3, 3);

            Console.WriteLine("经过删除和添加元素处理之后:");

            foreach (KeyValuePair<int, int> kvp in dic)
            {
                Console.WriteLine("Key:" + kvp.Key + " Value:" + kvp.Value);
            }

            Console.ReadKey();

Une brève discussion des exemples de code de Hashtable et Dictionary en C# Pour le dictionnaire, si un élément en est supprimé, l'élément nouvellement ajouté remplira la position de l'élément supprimé, provoquant ainsi une incohérence de l'ordre d'ajout des données avec l'ordre de lecture des données.

Pour Hashtable, son ordre de stockage des données est calculé selon un certain algorithme, donc dans la plupart des cas, son ordre de lecture des données et son ordre d'ajout des données sont incohérents.

Donc, si vous devez maintenir l'ordre lors de l'ajout de données, il est préférable de ne pas utiliser Dictionary et Hashtable.

Troisièmement, lorsque vous utilisez une valeur clé inexistante pour obtenir une valeur dans une table de hachage ou un dictionnaire

Pour Hashtable, si une valeur Key inexistante est utilisée pour obtenir la valeur, une valeur nulle sera renvoyée

 ;
            Hashtable ht = new Hashtable();
            Console.WriteLine(ht["b"]==null);
            Console.ReadKey();

Une brève discussion des exemples de code de Hashtable et Dictionary en C# Pour Dictionary, si une valeur Key inexistante est utilisée pour obtenir la valeur, une exception de type « System.Collections.Generic.KeyNotFoundException » sera levée.

Par conséquent, lorsque vous obtenez une valeur à partir d'un dictionnaire ou d'une table de hachage, vous pouvez d'abord déterminer si la valeur Key existe (utilisez la méthode ContainsKey() pour déterminer) afin d'éviter des valeurs ou des exceptions inattendues.

Quatrièmement, la sécurité des fils

Le dictionnaire n'est pas thread-safe, Hashtable est thread-safe.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn