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
Este tema aún no ha recibido ninguna valoración - Valorar este tema

Hashtable (Clase)

Representa una colección de pares de clave y valor que se organizan por código hash de la clave.

Espacio de nombres:  System.Collections
Ensamblado:  mscorlib (en mscorlib.dll)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class Hashtable : IDictionary, ICollection, 
	IEnumerable, ISerializable, IDeserializationCallback, ICloneable

El tipo Hashtable expone los siguientes miembros.

  Nombre Descripción
Método público Compatible con XNA Framework 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.
Método público Compatible con XNA Framework 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.
Método público Compatible con XNA Framework 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.
Método público Compatible con XNA Framework 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.
Método público Compatible con XNA Framework 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.
Método público Compatible con XNA Framework 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.
Método público Compatible con XNA Framework 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.
Método público Compatible con XNA Framework 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.
Método público Compatible con XNA Framework 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.
Método protegido Hashtable(SerializationInfo, StreamingContext) Inicializa una nueva instancia vacía de la clase Hashtable que es serializable, utilizando los objetos SerializationInfo y StreamingContext especificados.
Método público Compatible con XNA Framework 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).
Método público Compatible con XNA Framework 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.
Método público Compatible con XNA Framework 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.
Método público Compatible con XNA Framework 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.
Método público 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.
Método público 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.
Arriba
  Nombre Descripción
Propiedad protegida Compatible con XNA Framework comparer Obsoleto. Obtiene o establece el objeto IComparer que se utilizará para Hashtable.
Propiedad pública Compatible con XNA Framework Count Obtiene el número de pares de clave y valor incluidos en Hashtable.
Propiedad protegida Compatible con XNA Framework EqualityComparer Obtiene el IEqualityComparer que se va a utilizar para Hashtable.
Propiedad protegida Compatible con XNA Framework hcp Obsoleto. Obtiene o establece el objeto que puede dispensar códigos hash.
Propiedad pública Compatible con XNA Framework IsFixedSize Obtiene un valor que indica si Hashtable tiene un tamaño fijo.
Propiedad pública Compatible con XNA Framework IsReadOnly Obtiene un valor que indica si Hashtable es de sólo lectura.
Propiedad pública Compatible con XNA Framework IsSynchronized Obtiene un valor que indica si el acceso a Hashtable está sincronizado (es seguro para la ejecución de subprocesos).
Propiedad pública Compatible con XNA Framework Item Obtiene o establece el valor asociado a la clave especificada.
Propiedad pública Compatible con XNA Framework Keys Obtiene una ICollection que contiene las claves de Hashtable.
Propiedad pública Compatible con XNA Framework SyncRoot Obtiene un objeto que se puede utilizar para sincronizar el acceso a Hashtable.
Propiedad pública Compatible con XNA Framework Values Obtiene un objeto ICollection que contiene los valores de Hashtable.
Arriba
  Nombre Descripción
Método público Compatible con XNA Framework Add Agrega un elemento con la clave y el valor especificados a Hashtable.
Método público Compatible con XNA Framework Clear Quita todos los elementos de Hashtable.
Método público Compatible con XNA Framework Clone Crea una copia superficial de Hashtable.
Método público Compatible con XNA Framework Contains Determina si Hashtable contiene una clave específica.
Método público Compatible con XNA Framework ContainsKey Determina si Hashtable contiene una clave específica.
Método público Compatible con XNA Framework ContainsValue Determina si Hashtable contiene un valor específico.
Método público Compatible con XNA Framework CopyTo Copia los elementos de Hashtable a una instancia unidimensional de Array en el índice especificado.
Método público Compatible con XNA Framework Equals(Object) Determina si el objeto Object especificado es igual al objeto Object actual. (Se hereda de Object).
Método protegido Compatible con XNA Framework 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).
Método público Compatible con XNA Framework GetEnumerator Devuelve un IDictionaryEnumerator que recorre en iteración Hashtable.
Método protegido Compatible con XNA Framework GetHash Devuelve el código hash de la clave especificada.
Método público Compatible con XNA Framework GetHashCode Actúa como función hash para un tipo concreto. (Se hereda de Object).
Método público GetObjectData Implementa la interfaz de ISerializable y devuelve los datos necesarios para serializar Hashtable.
Método público Compatible con XNA Framework GetType Obtiene el objeto Type de la instancia actual. (Se hereda de Object).
Método protegido Compatible con XNA Framework KeyEquals Compara un Object específico con una clave concreta en Hashtable.
Método protegido Compatible con XNA Framework MemberwiseClone Crea una copia superficial del objeto Object actual. (Se hereda de Object).
Método público OnDeserialization Implementa la interfaz ISerializable y genera el evento de deserialización cuando esta finaliza.
Método público Compatible con XNA Framework Remove Quita el elemento con la clave especificada de Hashtable.
Método público Miembro estático Compatible con XNA Framework Synchronized Devuelve un contenedor sincronizado (seguro para subprocesos) para el objeto Hashtable.
Método público Compatible con XNA Framework ToString Devuelve una cadena que representa el objeto actual. (Se hereda de Object).
Arriba
  Nombre Descripción
Método de extensión público AsParallel Habilita la paralelización de una consulta. (Definido por ParallelEnumerable).
Método de extensión público AsQueryable Convierte una interfaz IEnumerable en IQueryable. (Definido por Queryable).
Método de extensión público Compatible con XNA Framework Cast<TResult> Convierte los elementos de IEnumerable en el tipo especificado. (Definido por Enumerable).
Método de extensión público Compatible con XNA Framework OfType<TResult> Filtra los elementos de IEnumerable en función de un tipo especificado. (Definido por Enumerable).
Arriba
  Nombre Descripción
Implementación explícita de interfaces Método privado Compatible con XNA Framework IEnumerable.GetEnumerator Devuelve un enumerador que recorre en iteración una colección.
Arriba

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:


foreach(DictionaryEntry de in myHashtable)
{
    // ...
}


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 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.
 */


.NET Framework

Compatible con: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

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.

¿Le ha resultado útil?
(Caracteres restantes: 1500)
Contenido de la comunidad Agregar