C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#におけるDictionaryとHashtableの違いを徹底解説

C#でキーと値のペアを管理する際によく使われるのが、HashtableDictionaryの2つのコレクションです。結論から言えば、HashtableはDictionaryよりも低速であり、厳密に型指定されたコレクションでは、Dictionaryの方が高速に動作します。

Hashtableとは

Hashtableクラスは、キーのハッシュコードに基づいて整理された、キーと値のペアのコレクションを表します。コレクション内の各要素には、キーを使ってアクセスします。HashtableはSystem.Collections名前空間に属する非ジェネリック型のため、格納される値はすべてobject型として扱われる点に注意しましょう。

サンプルコード

using System;
using System.Collections;

namespace Demo {
    class Program {
        static void Main(string[] args) {
            Hashtable ht = new Hashtable();

            ht.Add("E001", "Tom");
            ht.Add("E098", "Amit");
            ht.Add("E110", "Jack");

            ICollection key = ht.Keys;

            foreach (string k in key) {
                Console.WriteLine(k + ": " + ht[k]);
            }
            Console.ReadKey();
        }
    }
}

実行結果

E001: Tom
E098: Amit
E110: Jack

Dictionaryとは

Dictionaryは、C#におけるキーと値のコレクションです。Dictionary<TKey, TValue>はSystem.Collections.Generic名前空間に含まれており、ジェネリック型としてキーと値それぞれに具体的な型を指定できるため、型安全な操作が可能です。

サンプルコード

using System;
using System.Collections.Generic;

public class Demo {
    public static void Main() {

        IDictionary<int, int> dict = new Dictionary<int, int>();
        dict.Add(1, 234);
        dict.Add(2, 489);
        dict.Add(3, 599);
        dict.Add(4, 798);
        dict.Add(5, 810);
        dict.Add(6, 897);
        dict.Add(7, 909);

        Console.WriteLine("Dictionary elements: " + dict.Count);
    }
}

実行結果

Dictionary elements: 7

HashtableとDictionaryの主な違い

項目HashtableDictionary
型安全性非ジェネリック(object型)ジェネリック(型指定可能)
パフォーマンス比較的低速高速(ボックス化・ボックス化解除が不要)
名前空間System.CollectionsSystem.Collections.Generic
存在しないキーへのアクセスnullを返すKeyNotFoundExceptionをスロー

新規開発では、型安全性とパフォーマンスの観点から、特別な理由がない限りDictionaryを使用することが推奨されます。

  1. JavaにおけるHashtableとConcurrentHashMapの違い

    JavaにおけるHashtableとConcurrentHashMapの違い Javaでマップ(Map)をマルチスレッド環境下で扱う際、「Hashtable」と「ConcurrentHashMap」のどちらを使うべきか迷ったことはありませんか?どちらもスレッドセーフなMap実装ですが、ロックの仕組みやパフォーマンス、nullの扱いなどに大きな違いがあります。本記事では、両者の特徴を比較表とサンプルコードを交えて詳しく解説します。 Hashtableとは Hashtableは、JDK 1.1から提供されているレガシーなクラスで、Mapインターフェースの基本的な実装の一つです。すべてのpubli

  2. GoとJavaの違いを徹底比較!特徴と使い分けのポイント

    プログラミング言語を選ぶ際、「Go」と「Java」のどちらを採用すべきか迷う開発者は少なくありません。どちらもGoogleや企業システムで広く使われる人気言語ですが、設計思想や言語仕様には大きな違いがあります。本記事では、それぞれの言語の特徴を解説したうえで、両者の主な違いを比較表を使ってわかりやすく整理します。 GoとはGoはGoogleが開発した手続き型(プロシージャル)プログラミング言語です。プログラムはパッケージ単位で構成され、シンプルで読みやすいコード記述を重視した設計になっています。動的言語に近い柔軟なパターンを取り入れつつ、静的型付けによる安全性も兼ね備えています。また、軽量スレ