C#におけるDictionaryとHashtableの違いを徹底解説
C#でキーと値のペアを管理する際によく使われるのが、HashtableとDictionaryの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の主な違い
| 項目 | Hashtable | Dictionary |
|---|---|---|
| 型安全性 | 非ジェネリック(object型) | ジェネリック(型指定可能) |
| パフォーマンス | 比較的低速 | 高速(ボックス化・ボックス化解除が不要) |
| 名前空間 | System.Collections | System.Collections.Generic |
| 存在しないキーへのアクセス | nullを返す | KeyNotFoundExceptionをスロー |
新規開発では、型安全性とパフォーマンスの観点から、特別な理由がない限りDictionaryを使用することが推奨されます。
-
JavaにおけるHashtableとConcurrentHashMapの違い
JavaにおけるHashtableとConcurrentHashMapの違い Javaでマップ(Map)をマルチスレッド環境下で扱う際、「Hashtable」と「ConcurrentHashMap」のどちらを使うべきか迷ったことはありませんか?どちらもスレッドセーフなMap実装ですが、ロックの仕組みやパフォーマンス、nullの扱いなどに大きな違いがあります。本記事では、両者の特徴を比較表とサンプルコードを交えて詳しく解説します。 Hashtableとは Hashtableは、JDK 1.1から提供されているレガシーなクラスで、Mapインターフェースの基本的な実装の一つです。すべてのpubli
-
GoとJavaの違いを徹底比較!特徴と使い分けのポイント
プログラミング言語を選ぶ際、「Go」と「Java」のどちらを採用すべきか迷う開発者は少なくありません。どちらもGoogleや企業システムで広く使われる人気言語ですが、設計思想や言語仕様には大きな違いがあります。本記事では、それぞれの言語の特徴を解説したうえで、両者の主な違いを比較表を使ってわかりやすく整理します。 GoとはGoはGoogleが開発した手続き型(プロシージャル)プログラミング言語です。プログラムはパッケージ単位で構成され、シンプルで読みやすいコード記述を重視した設計になっています。動的言語に近い柔軟なパターンを取り入れつつ、静的型付けによる安全性も兼ね備えています。また、軽量スレ