Compartir a través de


Tipos de las colecciones Hashtable y Dictionary

La System.Collections.Hashtable clase y las System.Collections.Generic.Dictionary<TKey,TValue> clases genéricas y System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> implementan la System.Collections.IDictionary interfaz . La Dictionary<TKey,TValue> clase genérica también implementa la IDictionary<TKey,TValue> interfaz genérica. Por lo tanto, cada elemento de estas colecciones es un par clave-valor.

Un Hashtable objeto consiste en depósitos que contienen los elementos de la colección. Un cubo es un subgrupo virtual de elementos dentro Hashtablede , lo que hace que la búsqueda y recuperación sea más fácil y rápida que en la mayoría de las colecciones. Cada cubo está asociado a un código hash, que se genera mediante una función hash y se basa en la clave del elemento.

La clase genérica HashSet<T> es una colección desordenada para contener elementos únicos.

Una función hash es un algoritmo que devuelve un código hash numérico basado en 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. Es posible que una función hash genere 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 da como resultado un mejor rendimiento al recuperar elementos de la tabla hash.

Cada objeto que se usa como elemento de un Hashtable objeto debe ser capaz de generar un código hash para sí mismo mediante una implementación del GetHashCode método . Sin embargo, también puede especificar una función hash para todos los elementos de un Hashtable mediante un Hashtable constructor que acepte una IHashCodeProvider implementación como uno de sus parámetros.

Cuando se agrega un objeto a Hashtable, se almacena en el cubo asociado al código hash que coincide con el del objeto. Cuando se busca un valor en Hashtable, se genera el código hash para ese valor y se busca el cubo asociado a ese código hash.

Por ejemplo, una función hash para una cadena podría tomar los códigos ASCII de cada carácter de la cadena y agregarlos juntos para generar un código hash. La cadena "picnic" tendría un código hash diferente del código hash de la cadena "basket"; por lo tanto, las cadenas "picnic" y "cesta" estarían en cubos diferentes. En cambio, "bolsa" y "lobas" tendrían el mismo código hash y estarían en el mismo cubo.

Las Dictionary<TKey,TValue> clases y ConcurrentDictionary<TKey,TValue> tienen la misma funcionalidad que la Hashtable clase . Un Dictionary<TKey,TValue> de un tipo específico (distinto de Object) proporciona un mejor rendimiento que un Hashtable para los tipos de valor. Esto se debe a que los elementos de Hashtable son del tipo Object y, por lo tanto, las conversiones boxing y unboxing se suelen producir al almacenar o recuperar un tipo de valor. La ConcurrentDictionary<TKey,TValue> clase debe usarse cuando varios subprocesos puedan tener acceso a la colección simultáneamente.

Consulte también