Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

C#

C# Hashtable

C# Hashtable class is a collection class where we can store data in the key/value pair. Hashtable is not type-safe. Hashtable is not generic and both key and value are based on object type.

Hashtable is used to store unique keys data. If we try to assign value to already used key, it just overrides the previous stored data.

It is based on the Hashing algorithm which is optimized for retrieving the data fast. It only takes O(1) operation to retrieve any value based on key.

Hashing algorithm is based on hash function. A hash function is any function which maps variable size key data to a particular fixed size data.

Below is the diagram of hashing algorithm:

Hash Function

It use hash sum to generate address to store data. When any request is received to retrieve data, it calculates the hash sum again using hash function and directly go to that address to retrieve the associated data.

Below are some operations we can do on Hashtable class.

Add data

There are two ways to add data into Hashtable object:

  1. Using Add method
  2. Set key and value using Indexers

Hashtable hashTable = new Hashtable();
hashTable.Add("1000", "James");
hashTable.Add("2000", "Michael");
hashTable.Add("3000", "Sandy");

Hashtable hashTableUsingIndexers = new Hashtable();
hashTableUsingIndexers["4000"] = "George";
hashTableUsingIndexers["5000"] = "Kapil";
hashTableUsingIndexers["6000"] = "Tod";

Retrieve single entry

We can retrieve the data from Hashtable using indexers. Below is the example:


string firstName = (string)hashTable["1000"]; //Result "James"

As hashTable[“1000”] returns object, we have to cast the result to string.

Retrieve all entries

Hashtable implements the IEnumerable interface. That means we can use it in the foreach loop. In the loop, it returns the DictionaryEntry object each time we enumerate. DictionaryEntry class has two members:

  1. Key: object
  2. Value: object

We can use both members to retrieve the Key and Value of each entry. Below is the sample example:


foreach(DictionaryEntry entry in hashTable)
{
    Console.WriteLine("{0}-{1}", entry.Key, entry.Value);
}

Retrieve only Keys or Values

Hashtable provides a Keys and Values property to retrieve only the Keys or Values as collection.


foreach(object key in hashTable.Keys)
{
    Console.WriteLine(key.ToString());
}

foreach(object value in hashTable.Values)
{
    Console.WriteLine(value.ToString());
}

Update entry in C# Hashtable

For updating an entry, we need to set value again using the same key. As I said earlier, when we assign value using the same key, it overrides the data. Below is the example:


hashTable["3000"] = "Sandy";
//...
hashTable["3000"] = "Kapil";

string name = (string)hashTable["3000"]; //Returns Kapil

Remove entry

For removing an entry, we have to use Remove method in the Hashtable. Remove methods takes the Key as parameter. It removes the particular key/value pair from the records.


hashTable.Remove("3000");

Check Key/Value exists in Hashtable

There are three methods to find an entry. First two are based on searching on Keys and third one is based on using Value. All methods returns true if key/value pair exists else returns false.

  1. Contains: Search using the Key
  2. ContainsKey: Search using the Key
  3. ContainsValue: Search using the Value

Below is the examples of all three methods:


string searchByKey = "3000";
string searchByValue = "Michael";

if(hashTable.Contains(searchByKey))
{
    // key exists
}

if(hashTable.ContainsKey(searchByKey))
{
    // key exists
}

if(hashTable.ContainsValue(searchByValue))
{
    // value exists
}

Get Total number of Items

To get the total number exists, we can use the Count property which returns the integer as total number of items.


int totalRecords = hashTable.Count;

Final Words

Hashtable is optimized for faster retrieving the data. It computes the hash code from each key and use hash code to store the data. It only takes O(1) operation to retrieve any entry. Hashtable does not provide any type-safety.

Hashtable is an old data type to store data. Dictionary<> is a new data type to store key/Value pairs. Dictionary data type is of generic version. Dictionary provides type-safety and better performance as compared to Hashtable.