Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

Hashtable Constructor (IEqualityComparer)

Initializes a new, empty instance of the Hashtable class using the default initial capacity and load factor, and the specified IEqualityComparer object.

Namespace:  System.Collections
Assembly:  mscorlib (in mscorlib.dll)

	IEqualityComparer^ equalityComparer


Type: System.Collections::IEqualityComparer

The IEqualityComparer object that defines the hash code provider and the comparer to use with the Hashtable object.


nullptr to use the default hash code provider and the default comparer. The default hash code provider is each key's implementation of Object::GetHashCode and the default comparer is each key's implementation of Object::Equals.

A hash table's capacity is used to calculate the optimal number of hash table buckets based on the load factor. Capacity is automatically increased as required.

The load factor is the maximum ratio of elements to buckets. A smaller load factor means faster lookup at the cost of increased memory consumption.

When the actual load factor reaches the specified load factor, the number of buckets is automatically increased to the smallest prime number that is larger than twice the current number of buckets.

The IEqualityComparer object includes both the hash code provider and the comparer. If an IEqualityComparer is used in the Hashtable constructor, the objects used as keys in the Hashtable object are not required to override the Object::GetHashCode and Object::Equals methods.

The hash code provider dispenses hash codes for keys in the Hashtable. The default hash code provider is the key's implementation of Object::GetHashCode.

The comparer determines whether two keys are equal. Every key in a Hashtable must be unique. The default comparer is the key's implementation of Object::Equals.

The IEqualityComparer enables scenarios such as doing lookups with case-insensitive strings.

This constructor is an O(1) operation.

The following code example creates hash tables using different Hashtable constructors and demonstrates the differences in the behavior of the hash tables, even if each one contains the same elements.

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

ref class myComparer : IEqualityComparer
    virtual bool Equals(Object^ x, Object^ y) 
        return x->Equals(y);

    virtual int GetHashCode(Object^ obj)
        return obj->ToString()->ToLower()->GetHashCode();

ref class myCultureComparer : IEqualityComparer
    CaseInsensitiveComparer^ myComparer;

        myComparer = CaseInsensitiveComparer::DefaultInvariant;

    myCultureComparer(CultureInfo^ myCulture)
        myComparer = gcnew CaseInsensitiveComparer(myCulture);

    virtual bool Equals(Object^ x, Object^ y) 
        if (myComparer->Compare(x, y) == 0)
            return true;
            return false;

    virtual int GetHashCode(Object^ obj)
        return obj->ToString()->ToLower()->GetHashCode();

int main()

   // Create a hash table using the default hash code provider and the default comparer.
   Hashtable^ myHT1 = gcnew Hashtable((IEqualityComparer^)nullptr);
   myHT1->Add( "FIRST", "Hello" );
   myHT1->Add( "SECOND", "World" );
   myHT1->Add( "THIRD", "!" );

   // Create a hash table using the specified IEqualityComparer that uses 
   // the default Object.Equals to determine equality.
   Hashtable^ myHT2 = gcnew Hashtable(gcnew myComparer());
   myHT2->Add( "FIRST", "Hello" );
   myHT2->Add( "SECOND", "World" );
   myHT2->Add( "THIRD", "!" );

   // Create a hash table using a case-insensitive hash code provider and 
   // case-insensitive comparer based on the InvariantCulture.
   Hashtable^ myHT3 = gcnew Hashtable(
   myHT3->Add( "FIRST", "Hello" );
   myHT3->Add( "SECOND", "World" );
   myHT3->Add( "THIRD", "!" );

   // Create a hash table using an IEqualityComparer that is based on 
   // the Turkish culture (tr-TR) where "I" is not the uppercase
   // version of "i".
   CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
   Hashtable^ myHT4 = gcnew Hashtable( gcnew myCultureComparer(myCul) );
   myHT4->Add( "FIRST", "Hello" );
   myHT4->Add( "SECOND", "World" );
   myHT4->Add( "THIRD", "!" );

   // Search for a key in each hash table.
   Console::WriteLine( "first is in myHT1: {0}", myHT1->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT4: {0}", myHT4->ContainsKey( "first" ) );

This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: False
first is in myHT3: True
first is in myHT4: False


Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360, Zune

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0, 2.0

.NET Compact Framework

Supported in: 3.5, 2.0

XNA Framework

Supported in: 3.0, 2.0, 1.0

Community Additions

© 2015 Microsoft