Hashtable

HashtableCF 1.0, ECMA 1.0, serializable

System.Collections (mscorlib.dll)class

A hashtable is an associative array (dictionary) that contains key-value pairs. Each value is identified and retrieved by a specific key that is transformed into an integer value called a hashcode.

A hashtable is an efficient way to store and retrieve values in memory. It uses a fast algorithm to convert a hashcode into a hash key. This hash key is used internally to determine which "bucket" a hashtable entry belongs to. Although the algorithm selects a bucket quickly, each bucket may contain more than one value. In this case, a linear search locates the desired value based on its hashcode. However, the fast bucket search offers such an advantage that a subsequent linear search has a negligible impact on the overall performance of the hashtable.

Initially, a 1-to-1 ratio of buckets to values applies (called the load factor). However, as more items are added to the hashtable, the load factor is changed, and each bucket ends up holding more elements. Greater load factors reduce the amount of memory required to store the hashtable, but increase lookup time.

The first argument to the Hashtable constructor gives a value for its initial size or provides an existing IDictionary whose values will fill the Hashtable. A Hashtable automatically increases its size when all buckets are full. The loadFactor argument is optionally used to specify the load factor; the default is 1.0. You can also provide references to IHashCodeProvider and IComparer instances in the constructor to provide custom hashcode and key-sorting functionality.

Keys of varying types can be used as in a regular dictionary collection. A hashing algorithm is used to convert the key into the hashcode. This is accomplished by the GetHashCode( ) method of each key object, which is a virtual method provided by Object. GetHashCode( ) can be overridden to use a custom algorithm instead of the default hashing algorithm provided by the CLR. (See CaseInsensitiveHashCodeProvider.)

The Keys and Values properties retrieve ICollection objects containing the keys and values, respectively, of the Hashtable.

The Hashtable indexer allows you to get or retrieve a value by specific key. If a key already exists, its value is overwritten. The Add( ) method can also add a new key and value to a Hashtable, but throws an exception if the key already exists.

public class Hashtable : IDictionary, ICollection, IEnumerable, System.Runtime.Serialization.ISerializable,
       System.Runtime.Serialization.IDeserializationCallback, ICloneable {
// Public Constructors
   public Hashtable( );
   public Hashtable(IDictionary d);
   public Hashtable(IDictionary d, IHashCodeProvider hcp, IComparer comparer);
   public Hashtable(IDictionary d, float loadFactor);
   public Hashtable(IDictionary d, float loadFactor, IHashCodeProvider hcp, IComparer comparer);
   public Hashtable(IHashCodeProvider hcp, IComparer comparer);
   public Hashtable(int capacity);
   public Hashtable(int capacity, IHashCodeProvider hcp, IComparer comparer);
   public Hashtable(int capacity, float loadFactor);
   public Hashtable(int capacity, float loadFactor, IHashCodeProvider hcp, IComparer comparer);
// Protected Constructors
   protected Hashtable(System.Runtime.Serialization.SerializationInfo info,
        System.Runtime.Serialization.StreamingContext context);
// Public Instance Properties
   public virtual int Count{get; }       
// implements ICollection
   public virtual bool IsFixedSize{get; }
// implements IDictionary
   public virtual bool IsReadOnly{get; } 
// implements IDictionary
   public virtual bool IsSynchronized{get; }          
// implements ICollection
   public virtual ICollection Keys{get; }
// implements IDictionary
   public virtual object SyncRoot{get; } 
// implements ICollection
   public virtual object this[object key]{set; get; }
// implements IDictionary
   public virtual ICollection Values{get; }           
// implements IDictionary
// Protected Instance Properties
   protected IComparer comparer{set; get; }
   protected IHashCodeProvider hcp{set; get; }
// Public Static Methods
   public static Hashtable Synchronized(Hashtable table);
// Public Instance Methods
   public virtual void Add(object key, object value);
// implements IDictionary
   public virtual void Clear( );          
// implements IDictionary
   public virtual object Clone( );        
// implements ICloneable
   public virtual bool Contains(object key);         
// implements IDictionary
   public virtual bool ContainsKey(object key);
   public virtual bool ContainsValue(object value);
   public virtual void CopyTo(Array array, int arrayIndex);     
// implements ICollection
   public virtual IDictionaryEnumerator GetEnumerator( );         
// implements IDictionary
   public virtual void GetObjectData(System.Runtime.Serialization.SerializationInfo info,
        System.Runtime.Serialization.StreamingContext context)
// implements ISerializable
   public virtual void OnDeserialization(object sender)
// implements System.Runtime.Serialization.IDeserializationCallback
   public virtual void Remove(object key);           
// implements IDictionary
// Protected Instance Methods
   protected virtual int GetHash(object key);
   protected virtual bool KeyEquals(object item, object key);
}

Returned By

DictionaryBase.InnerHashtable, System.Collections.Specialized.CollectionsUtil.CreateCaseInsensitiveHashtable( )



    Part II: Programming with the .NET Framework
    Part IV: API Quick Reference
    Chapter 26. System