Export (0) Print
Expand All

Hashtable Constructor (IDictionary, Single)

Initializes a new instance of the Hashtable class by copying the elements from the specified dictionary to the new Hashtable object. The new Hashtable object has an initial capacity equal to the number of elements copied, and uses the specified load factor, and the default hash code provider and comparer.

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

public:
Hashtable(
	IDictionary^ d, 
	float loadFactor
)

Parameters

d
Type: System.Collections::IDictionary

The IDictionary object to copy to a new Hashtable object.

loadFactor
Type: System::Single

A number in the range from 0.1 through 1.0 that is multiplied by the default value which provides the best performance. The result is the maximum ratio of elements to buckets.

ExceptionCondition
ArgumentNullException

d is nullptr.

ArgumentOutOfRangeException

loadFactor is less than 0.1.

-or-

loadFactor is greater than 1.0.

The initial capacity is set to the number of elements in the source dictionary. Capacity is automatically increased as required based on the load factor.

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. A load factor of 1.0 is the best balance between speed and size.

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 hash code provider dispenses hash codes for keys in the Hashtable object. 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 elements of the new Hashtable are sorted in the same order in which the enumerator iterates through the IDictionary object.

This constructor is an O(n) operation, where n is the number of elements in the d parameter.

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 myCultureComparer : public IEqualityComparer
{
public:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

public:
    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

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

public:
    virtual int GetHashCode(Object^ obj)
    {
        // Compare the hash code for the lowercase versions of the strings. 
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

public ref class SamplesHashtable
{

public:
	static void Main()
	{
	   
	   // Create the dictionary.
	   SortedList^ mySL = gcnew SortedList;
	   mySL->Add( "FIRST", "Hello" );
	   mySL->Add( "SECOND", "World" );
	   mySL->Add( "THIRD", "!" );
	   
	   // Create a hash table using the default hash code provider and the default comparer.
	   Hashtable^ myHT1 = gcnew Hashtable( mySL,(float).8 );
	   
	   // Create a hash table using the specified case-insensitive hash code provider and case-insensitive comparer.
	   Hashtable^ myHT2 = gcnew Hashtable( mySL,(float).8,gcnew myCultureComparer() );
	   
	   // Create a hash table using the specified KeyComparer. 
	   // The KeyComparer uses a case-insensitive hash code provider and a case-insensitive comparer, 
	   // which are based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
	   CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
	   Hashtable^ myHT3 = gcnew Hashtable( mySL,(float).8, gcnew myCultureComparer( myCul ) );
	   
	   // 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" ) );
	}
};

int main()
{
	SamplesHashtable::Main();
}

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

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

*/

.NET Framework

Supported in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

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

Show:
© 2014 Microsoft