Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original. |
Traducción
Original
|
Hashtable (Clase)
Representa una colección de pares de clave y valor que se organizan por código hash de la clave.
Ensamblado: mscorlib (en mscorlib.dll)
El tipo Hashtable expone los siguientes miembros.
| Nombre | Descripción | |
|---|---|---|
|
Hashtable() | Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial, el factor de carga, el proveedor de código hash y el comparador predeterminados. |
|
Hashtable(IDictionary) | Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en el nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, y utiliza el factor de carga, el proveedor de código hash y comparador predeterminados. |
|
Hashtable(IEqualityComparer) | Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial y el factor de carga predeterminados, y el objeto IEqualityComparer especificado. |
|
Hashtable(Int32) | Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial especificada, y el factor de carga, el proveedor de código hash y el comparador predeterminados. |
|
Hashtable(IDictionary, IEqualityComparer) | Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en un nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, y utiliza el factor de carga predeterminado y el objeto IEqualityComparer especificado. |
|
Hashtable(IDictionary, Single) | Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en el nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, utiliza el factor de carga especificado, y el proveedor de código hash y comparador predeterminados. |
|
Hashtable(IHashCodeProvider, IComparer) | Obsoleto. Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial y el factor de carga predeterminados, y el proveedor de código hash y el comparador especificados. |
|
Hashtable(Int32, IEqualityComparer) | Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial y el objeto IEqualityComparer especificados, y el factor de carga predeterminado. |
|
Hashtable(Int32, Single) | Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial y el factor de carga especificados, y el proveedor de código hash y el comparador predeterminados. |
|
Hashtable(SerializationInfo, StreamingContext) | Inicializa una nueva instancia vacía de la clase Hashtable que es serializable, utilizando los objetos SerializationInfo y StreamingContext especificados. |
|
Hashtable(IDictionary, IHashCodeProvider, IComparer) | Obsoleto. Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en el nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, utiliza el factor de carga predeterminado, y el proveedor de código hash y comparador especificados. Esta API está obsoleta. Para una alternativa, vea Hashtable(IDictionary, IEqualityComparer). |
|
Hashtable(IDictionary, Single, IEqualityComparer) | Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en el nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, y utiliza el factor de carga y el objeto IEqualityComparer especificados. |
|
Hashtable(Int32, IHashCodeProvider, IComparer) | Obsoleto. Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial, el proveedor de código hash y el comparador especificados, y el factor de carga predeterminado. |
|
Hashtable(Int32, Single, IEqualityComparer) | Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial, el factor de carga y el objeto IEqualityComparer especificados. |
|
Hashtable(IDictionary, Single, IHashCodeProvider, IComparer) | Obsoleto. Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en el nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, y utiliza el factor de carga, el proveedor de código hash y el comparador especificados. |
|
Hashtable(Int32, Single, IHashCodeProvider, IComparer) | Obsoleto. Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial, el factor de carga, el proveedor de código hash y el comparador especificados. |
| Nombre | Descripción | |
|---|---|---|
|
comparer | Obsoleto. Obtiene o establece el objeto IComparer que se utilizará para Hashtable. |
|
Count | Obtiene el número de pares de clave y valor incluidos en Hashtable. |
|
EqualityComparer | Obtiene el IEqualityComparer que se va a utilizar para Hashtable. |
|
hcp | Obsoleto. Obtiene o establece el objeto que puede dispensar códigos hash. |
|
IsFixedSize | Obtiene un valor que indica si Hashtable tiene un tamaño fijo. |
|
IsReadOnly | Obtiene un valor que indica si Hashtable es de sólo lectura. |
|
IsSynchronized | Obtiene un valor que indica si el acceso a Hashtable está sincronizado (es seguro para la ejecución de subprocesos). |
|
Item | Obtiene o establece el valor asociado a la clave especificada. |
|
Keys | Obtiene una ICollection que contiene las claves de Hashtable. |
|
SyncRoot | Obtiene un objeto que se puede utilizar para sincronizar el acceso a Hashtable. |
|
Values | Obtiene un objeto ICollection que contiene los valores de Hashtable. |
| Nombre | Descripción | |
|---|---|---|
|
Add | Agrega un elemento con la clave y el valor especificados a Hashtable. |
|
Clear | Quita todos los elementos de Hashtable. |
|
Clone | Crea una copia superficial de Hashtable. |
|
Contains | Determina si Hashtable contiene una clave específica. |
|
ContainsKey | Determina si Hashtable contiene una clave específica. |
|
ContainsValue | Determina si Hashtable contiene un valor específico. |
|
CopyTo | Copia los elementos de Hashtable a una instancia unidimensional de Array en el índice especificado. |
|
Equals(Object) | Determina si el objeto Object especificado es igual al objeto Object actual. (Se hereda de Object). |
|
Finalize | Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recolección de elementos no utilizados. (Se hereda de Object). |
|
GetEnumerator | Devuelve un IDictionaryEnumerator que recorre en iteración Hashtable. |
|
GetHash | Devuelve el código hash de la clave especificada. |
|
GetHashCode | Actúa como función hash para un tipo concreto. (Se hereda de Object). |
|
GetObjectData | Implementa la interfaz de ISerializable y devuelve los datos necesarios para serializar Hashtable. |
|
GetType | Obtiene el objeto Type de la instancia actual. (Se hereda de Object). |
|
KeyEquals | Compara un Object específico con una clave concreta en Hashtable. |
|
MemberwiseClone | Crea una copia superficial del objeto Object actual. (Se hereda de Object). |
|
OnDeserialization | Implementa la interfaz ISerializable y genera el evento de deserialización cuando esta finaliza. |
|
Remove | Quita el elemento con la clave especificada de Hashtable. |
|
Synchronized | Devuelve un contenedor sincronizado (seguro para subprocesos) para el objeto Hashtable. |
|
ToString | Devuelve una cadena que representa el objeto actual. (Se hereda de Object). |
| Nombre | Descripción | |
|---|---|---|
|
AsParallel | Habilita la paralelización de una consulta. (Definido por ParallelEnumerable). |
|
AsQueryable | Convierte una interfaz IEnumerable en IQueryable. (Definido por Queryable). |
|
Cast<TResult> | Convierte los elementos de IEnumerable en el tipo especificado. (Definido por Enumerable). |
|
OfType<TResult> | Filtra los elementos de IEnumerable en función de un tipo especificado. (Definido por Enumerable). |
| Nombre | Descripción | |
|---|---|---|
|
IEnumerable.GetEnumerator | Devuelve un enumerador que recorre en iteración una colección. |
Cada elemento es un par de clave y valor almacenado en un objeto DictionaryEntry. Una clave no puede ser null, pero un valor sí puede serlo.
Los objetos utilizados como claves por Hashtable son necesarios para reemplazar el método Object.GetHashCode (o la interfaz IHashCodeProvider) y el método Object.Equals (o la interfaz IComparer). La implementación de ambos métodos e interfaces debe tratar la distinción entre mayúsculas y minúsculas de la misma manera; de lo contrario, el comportamiento de Hashtable podría ser incorrecto. Por ejemplo, al crear Hashtable, debe utilizar la clase CaseInsensitiveHashCodeProvider (o una implementación de IHashCodeProvider que no haga distinción entre mayúsculas y minúsculas) con la clase CaseInsensitiveComparer (o una implementación de IComparer que no haga distinción entre mayúsculas y minúsculas).
Asimismo, estos métodos deben dar los mismos resultados cuando se llamen con los mismos parámetros mientras la clave esté incluida en Hashtable. Una alternativa es utilizar un constructor de Hashtable con un parámetro de IEqualityComparer. Si la igualdad de clave fuera simplemente una igualdad de referencia, sería suficiente la implementación heredada de Object.GetHashCode y Object.Equals.
Los objetos de claves deben permanecer inmutables mientras se utilicen como claves en Hashtable.
Cuando se agrega un elemento a Hashtable, el elemento se coloca en un sector de almacenamiento en función del código hash de la clave. Las búsquedas posteriores de la clave utilizarán su código hash para buscar en un sector de almacenamiento determinado solamente; de este modo, se reducirá considerablemente el número de comparaciones de clave necesarias para encontrar un elemento.
El factor de carga de Hashtable determina la relación máxima de elementos por sectores de almacenamiento. Factores de carga más pequeños causan tiempos de búsqueda más largos a costa de un mayor consumo de memoria. El factor de carga predeterminado de 1,0 suele proporcionar el mejor equilibrio entre velocidad y tamaño. También se puede especificar un factor de carga diferente cuando se cree Hashtable.
Conforme se agregan elementos a Hashtable, va aumentando el factor de carga real de Hashtable. Cuando el factor de carga real alcanza el factor de carga especificado, el número de depósitos de Hashtable aumenta automáticamente hasta el número primo más pequeño que sea superior al doble del número actual de depósitos de Hashtable.
Cada objeto de clave de Hashtable debe proporcionar su propia función hash, a la que se tiene acceso llamando al método GetHash. Sin embargo, se puede pasar cualquier objeto que implemente IHashCodeProvider a un constructor Hashtable y utilizar esa función hash para todos los objetos de la tabla.
La capacidad de Hashtable es el número de elementos que Hashtable puede contener. Conforme se agregan elementos a Hashtable, la capacidad aumenta automáticamente según lo requiera la reasignación.
La instrucción foreach del lenguaje C# (For Each en Visual Basic) requiere el tipo de cada elemento de la colección. Como los elementos de Hashtable son pares de clave y valor, el tipo del elemento no se corresponde con el tipo de la clave ni con el del valor. En su lugar, el tipo del elemento es DictionaryEntry. Por ejemplo:
La instrucción foreach es un contenedor del enumerador, que sólo permite la lectura pero no la escritura en la colección.
Dado que la serialización y deserialización de un enumerador para un objeto Hashtable puede provocar la reordenación de los elementos, no es posible continuar con la enumeración sin llamar antes al método Reset.
Nota
|
|---|
|
Dado que las claves se pueden heredar y su comportamiento puede cambiar, no es posible garantizar su unicidad absoluta mediante comparaciones utilizando el método Equals. |
En el ejemplo siguiente se muestra cómo se crean, inicializan y realizan diversas funciones para Hashtable y cómo se imprimen sus claves y valores.
using System; using System.Collections; class Example { public static void Main() { // Create a new hash table. // Hashtable openWith = new Hashtable(); // Add some elements to the hash table. There are no // duplicate keys, but some of the values are duplicates. openWith.Add("txt", "notepad.exe"); openWith.Add("bmp", "paint.exe"); openWith.Add("dib", "paint.exe"); openWith.Add("rtf", "wordpad.exe"); // The Add method throws an exception if the new key is // already in the hash table. try { openWith.Add("txt", "winword.exe"); } catch { Console.WriteLine("An element with Key = \"txt\" already exists."); } // The Item property is the default property, so you // can omit its name when accessing elements. Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]); // The default Item property can be used to change the value // associated with a key. openWith["rtf"] = "winword.exe"; Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]); // If a key does not exist, setting the default Item property // for that key adds a new key/value pair. openWith["doc"] = "winword.exe"; // ContainsKey can be used to test keys before inserting // them. if (!openWith.ContainsKey("ht")) { openWith.Add("ht", "hypertrm.exe"); Console.WriteLine("Value added for key = \"ht\": {0}", openWith["ht"]); } // When you use foreach to enumerate hash table elements, // the elements are retrieved as KeyValuePair objects. Console.WriteLine(); foreach( DictionaryEntry de in openWith ) { Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value); } // To get the values alone, use the Values property. ICollection valueColl = openWith.Values; // The elements of the ValueCollection are strongly typed // with the type that was specified for hash table values. Console.WriteLine(); foreach( string s in valueColl ) { Console.WriteLine("Value = {0}", s); } // To get the keys alone, use the Keys property. ICollection keyColl = openWith.Keys; // The elements of the KeyCollection are strongly typed // with the type that was specified for hash table keys. Console.WriteLine(); foreach( string s in keyColl ) { Console.WriteLine("Key = {0}", s); } // Use the Remove method to remove a key/value pair. Console.WriteLine("\nRemove(\"doc\")"); openWith.Remove("doc"); if (!openWith.ContainsKey("doc")) { Console.WriteLine("Key \"doc\" is not found."); } } } /* This code example produces the following output: An element with Key = "txt" already exists. For key = "rtf", value = wordpad.exe. For key = "rtf", value = winword.exe. Value added for key = "ht": hypertrm.exe Key = dib, Value = paint.exe Key = txt, Value = notepad.exe Key = ht, Value = hypertrm.exe Key = bmp, Value = paint.exe Key = rtf, Value = winword.exe Key = doc, Value = winword.exe Value = paint.exe Value = notepad.exe Value = hypertrm.exe Value = paint.exe Value = winword.exe Value = winword.exe Key = dib Key = txt Key = ht Key = bmp Key = rtf Key = doc Remove("doc") Key "doc" is not found. */
Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (no se admite Server Core), Windows Server 2008 R2 (se admite Server Core con SP1 o posterior), Windows Server 2003 SP2
.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
La clase Hashtable es segura para la ejecución de subprocesos si la utilizan varios subprocesos de lectura y un único subproceso de escritura. Es segura para la ejecución de subprocesos cuando la utilizan varios subprocesos si sólo uno de ellos realiza operaciones de escritura (actualización), lo que permite la realización de lecturas sin bloqueo siempre y cuando los sistemas de escritura estén serializados en Hashtable. Para admitir varios subprocesos de escritura, todas las operaciones en Hashtable se deben realizar a través del contenedor que devuelve el método Synchronized, siempre que no haya ningún subproceso leyendo el objeto Hashtable.
La enumeración en una colección no es en esencia un procedimiento seguro para la ejecución de subprocesos. Incluso cuando una colección está sincronizada, otros subprocesos todavía pueden modificarla, lo que hace que el enumerador produzca una excepción. Para garantizar la seguridad de los subprocesos durante la enumeración, es posible bloquear la colección durante toda la enumeración o detectar las excepciones resultantes de los cambios realizados por otros subprocesos.
Nota