C# | Difference between Hashtable and Dictionary

In C#, Hashtables and Dictionaries are two commonly used collection type for storing and retrieving key-value pairs.

The following example demonstrates creating a Hashtable and adding elements.

Example: Create and Add Elements
Hashtable numberNames = new Hashtable();
numberNames.Add(1,"One"); //adding a key/value using the Add() method
numberNames.Add(2,"Two");
numberNames.Add(3,"Three");

//The following throws run-time exception: key already added.
//numberNames.Add(3, "Three"); 

foreach(DictionaryEntry de in numberNames)
        Console.WriteLine("Key: {0}, Value: {1}", de.Key, de.Value);

Dictionary can be created by passing the type of keys and values it can store.

Example: Create Dictionary and Add Elements
IDictionary<int, string> numberNames = new Dictionary<int, string>();
numberNames.Add(1,"One"); //adding a key/value using the Add() method
numberNames.Add(2,"Two");
numberNames.Add(3,"Three");

//The following throws run-time exception: key already added.
//numberNames.Add(3, "Three"); 

foreach(KeyValuePair<int, string> kvp in numberNames)
        Console.WriteLine("Key: {0}, Value: {1}", kvp.Key, kvp.Value);

Hashtable vs Dictionary

The following table lists the differences between Hashtable and Dictionary in C#.

HashtableDictionary
Hashtable is included in the System.Collections namespace.Dictionary is included in the System.Collections.Generic namespace.
Hashtable is a loosely typed (non-generic) collection, this means it stores key-value pairs of any data types.Dictionary is a generic collection. So it can store key-value pairs of specific data types.
Hashtable is thread safe.Only public static members are thread safe in Dictionary.
Hashtable returns null if we try to find a key which does not exist.Dictionary throws an exception if we try to find a key which does not exist.
Data retrieval is slower than the dictionary collection because of boxing-unboxing.Data retrieval is faster than Hashtable because it is a type safe so no need of boxing-unboxing.

Comments

Popular posts from this blog

C# | Association, Aggregation and Composition

Throw vs Throw ex in C#

String[] args in C#