Compartir a través de


Tipos de las colecciones Hashtable y Dictionary

Actualización: noviembre 2007

La clase Hashtable y la clase genérica Dictionary<TKey, TValue> implementan la interfaz IDictionary. La clase genérica Dictionary<TKey, TValue> también implementa la interfaz genérica IDictionary<TKey, TValue>. Por consiguiente, todos los elementos de estas colecciones son un par de clave y valor.

Un objeto Hashtable está formado por sectores que contienen los elementos de la colección. Un sector de almacenamiento es un subgrupo virtual de elementos dentro de la Hashtable con el que se consigue facilitar y agilizar la búsqueda y la recuperación con respecto a la mayoría de las colecciones. Cada sector de almacenamiento está asociado con un código hash, generado con una función hash y basado en la clave del elemento.

Una función hash es un algoritmo que devuelve un código hash numérico en función de una clave. La clave es el valor de alguna propiedad del objeto que se almacena. Una función hash siempre debe devolver el mismo código hash para la misma clave. Una función hash puede generar el mismo código hash para dos claves diferentes, pero una función hash que genera un código hash único para cada clave única tiene mejor rendimiento al recuperar los elementos de la tabla hash.

Cada objeto utilizado como elemento en una Hashtable deberá poder generar un código hash para sí mismo mediante una implementación del método GetHashCode. Aun así, también puede especificarse una función hash para todos los elementos en Hashtable mediante un constructor de Hashtable que acepte como parámetro una implementación de IHashCodeProvider.

Cuando se agrega un objeto a Hashtable, éste pasa al sector de almacenamiento asociado al código hash que coincide con el suyo propio. Cuando se busca un valor en Hashtable, se genera el código hash para ese valor y se busca el sector de almacenamiento asociado al código.

Por ejemplo, una función hash de una cadena puede aceptar los códigos ASCII de cada carácter de la cadena y sumarlos todos para generar un código hash. La cadena "picnic" tendría un código hash distinto al de la cadena "cesta"; por lo tanto, las cadenas "picnic" y "cesta" estarían en distintos sectores de almacenamiento. Por otro lado, "gato" y "toga" tendrían el mismo código hash y estarían en el mismo sector de almacenamiento.

La clase Dictionary<TKey, TValue> tiene la misma funcionalidad que la clase Hashtable. Un Dictionary<TKey, TValue> de un tipo específico (que no sea Object) rinde más que la clase Hashtable para los tipos de valores, ya que los elementos de Hashtable son del tipo Object y, por tanto, se producen conversiones boxing y unboxing si se almacena o recupera un valor.

Vea también

Referencia

Hashtable

IDictionary

IHashCodeProvider

Dictionary<TKey, TValue>

System.Collections.Generic.IDictionary<TKey, TValue>

Otros recursos

Tipos de colección utilizados normalmente