ホームページ  >  記事  >  バックエンド開発  >  C# のハッシュテーブルとディクショナリのコード例の簡単な説明

C# のハッシュテーブルとディクショナリのコード例の簡単な説明

黄舟
黄舟オリジナル
2017-03-09 15:21:121348ブラウズ

C# での Hashtable と Dictionary のコード例:

Dictionary () Hashtable()

まず、保存されるデータの種類

ハッシュテーブルはジェネリックではなく、タイプセーフでもありません。 Hashtableのキー値はすべてObject型ですが、Dictionaryキー値のデータ型を指定することができます。

つまり、HashtableにObject以外のデータ型が格納されている場合、データを取り出す際に型変換して表示しないと正常に使用できません。辞書にはこの問題はありません。

この点で、Hashtable は Dictionary と同等です

            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

2つ目は、データを読み取る順序とデータを追加する順序の一貫性です

DictionaryやHashtableのデータの読み込み順序と、データを追加する際のデータの順序の整合性は保証できない、あるいは整合性がないと言えます。

辞書は追加のみで削除はしない場合、データの読み取り順序を追加時の順序と一致させることができます。 ただし、削除および追加操作の後は、データの読み取り順序が追加時の順序と同じであることは保証されなくなります。

りー

Dictionaryの場合、要素を削除すると、削除された要素の位置に新しく追加された要素が埋められるため、データの追加順序とデータの読み取り順序が矛盾します。

C# のハッシュテーブルとディクショナリのコード例の簡単な説明 Hashtable は、データの格納順序が一定のアルゴリズムに従って計算されているため、データの読み込み順序とデータの追加順序が一致しない場合がほとんどです。

したがって、データを追加するときに順序を維持する必要がある場合は、辞書とハッシュテーブルを使用しないことをお勧めします。

第三に、存在しない Key 値を使用して Hashtable または Dictionary の値を取得する場合

Hashtable の場合、存在しない Key 値を使用して値を取得すると、null が返されます;

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();

Dictionary の場合、存在しない Key 値を使用して値を取得すると、「System.Collections.Generic.KeyNotFoundException」タイプの例外がスローされます。

C# のハッシュテーブルとディクショナリのコード例の簡単な説明 したがって、辞書またはハッシュテーブルから値を取得するときは、予期しない値や例外を防ぐために、最初に Key 値が存在するかどうかを判断する (ContainsKey() メソッドを使用して判断する) ことができます。

4 つ目、スレッドの安全性

ディクショナリはスレッドセーフではありませんが、ハッシュテーブルはスレッドセーフです。

以上がC# のハッシュテーブルとディクショナリのコード例の簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。