Tipos de las colecciones Hashtable y DictionaryHashtable and Dictionary Collection Types

La clase System.Collections.Hashtable y las clases genéricas System.Collections.Generic.Dictionary<TKey,TValue> y System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> implementan la interfaz System.Collections.IDictionary.The System.Collections.Hashtable class, and the System.Collections.Generic.Dictionary<TKey,TValue> and System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> generic classes, implement the System.Collections.IDictionary interface. La clase genérica Dictionary<TKey,TValue> también implementa la interfaz genérica IDictionary<TKey,TValue>.The Dictionary<TKey,TValue> generic class also implements the IDictionary<TKey,TValue> generic interface. Por lo tanto, cada elemento de esta colección es un par de clave y valor.Therefore, each element in these collections is a key-and-value pair.

Un objeto Hashtable consta de depósitos que contienen los elementos de la colección.A Hashtable object consists of buckets that contain the elements of the collection. Un depósito es un subgrupo virtual de elementos dentro de la colección Hashtable, lo que permite buscar y recuperar más fácil y rápidamente que en la mayoría de las colecciones.A bucket is a virtual subgroup of elements within the Hashtable, which makes searching and retrieving easier and faster than in most collections. Cada depósito está asociado con un código hash, que se genera usando una función hash y se basa en la clave del elemento.Each bucket is associated with a hash code, which is generated using a hash function and is based on the key of the element.

La clase genérica HashSet<T> es una colección no ordenada de elementos únicos.The generic HashSet<T> class is an unordered collection for containing unique elements.

Una función hash es un algoritmo que devuelve un código hash numérico basado en una clave.A hash function is an algorithm that returns a numeric hash code based on a key. La clave es el valor de alguna propiedad del objeto que se almacena.The key is the value of some property of the object being stored. Una función hash siempre debe devolver el mismo código hash para la misma clave.A hash function must always return the same hash code for the same key. Una función hash puede generar el mismo código hash para dos claves diferentes, pero las funciones hash que generan un código hash único para cada clave única tienen un rendimiento mejor al recuperar los elementos de la tabla hash.It is possible for a hash function to generate the same hash code for two different keys, but a hash function that generates a unique hash code for each unique key results in better performance when retrieving elements from the hash table.

Cada objeto que se usa como un elemento en una colección Hashtable debe ser capaz de generar un código hash para sí mismo usando una implementación del método GetHashCode.Each object that is used as an element in a Hashtable must be able to generate a hash code for itself by using an implementation of the GetHashCode method. Sin embargo, también puede especificar una función hash para todos los elementos de una colección Hashtable usando un constructor Hashtable que acepta una implementación de IHashCodeProvider como uno de sus parámetros.However, you can also specify a hash function for all elements in a Hashtable by using a Hashtable constructor that accepts an IHashCodeProvider implementation as one of its parameters.

Cuando se agrega un objeto a una colección Hashtable, se almacena en el depósito que está asociado con el código hash que coincide con el código hash del objeto.When an object is added to a Hashtable, it is stored in the bucket that is associated with the hash code that matches the object's hash code. Cuando se busca un valor en la colección Hashtable, se genera el código hash para ese valor y se busca el depósito asociado con ese código hash.When a value is being searched for in the Hashtable, the hash code is generated for that value, and the bucket associated with that hash code is searched.

Por ejemplo, una función hash para una cadena podría tomar los códigos ASCII de cada carácter de la cadena y sumarlos todos para generar un código hash.For example, a hash function for a string might take the ASCII codes of each character in the string and add them together to generate a hash code. La cadena "picnic" tendría un código hash que es diferente del código hash de la cadena "cesta"; por lo tanto, las cadenas "picnic" y "cesta" estarían en depósitos distintos.The string "picnic" would have a hash code that is different from the hash code for the string "basket"; therefore, the strings "picnic" and "basket" would be in different buckets. En cambio, "bolsa" y "lobas" tendrían el mismo código hash y estarían en el mismo cubo.In contrast, "stressed" and "desserts" would have the same hash code and would be in the same bucket.

Las clases Dictionary<TKey,TValue> y ConcurrentDictionary<TKey,TValue> tienen la misma funcionalidad que la clase Hashtable.The Dictionary<TKey,TValue> and ConcurrentDictionary<TKey,TValue> classes have the same functionality as the Hashtable class. Una clase Dictionary<TKey,TValue> de un tipo específico (distinto de Object) proporciona un rendimiento mejor que una clase Hashtable para tipos de valor.A Dictionary<TKey,TValue> of a specific type (other than Object) provides better performance than a Hashtable for value types. 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.This is because the elements of Hashtable are of type Object; therefore, boxing and unboxing typically occur when you store or retrieve a value type. La clase ConcurrentDictionary<TKey,TValue> debe usarse cuando varios subprocesos puedan tener acceso a la colección simultáneamente.The ConcurrentDictionary<TKey,TValue> class should be used when multiple threads might be accessing the collection simultaneously.

Vea tambiénSee also