Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase Hashtable

 

Publicado: octubre de 2016

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

Para examinar el código fuente de .NET Framework para este tipo, consulte el Reference Source.

Espacio de nombres:   System.Collections
Ensamblado:  mscorlib (en mscorlib.dll)


[SerializableAttribute]
[ComVisibleAttribute(true)]
public class Hashtable : IDictionary, ICollection, IEnumerable, 
	ISerializable, IDeserializationCallback, ICloneable

NombreDescripción
System_CAPS_pubmethodHashtable()

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.

System_CAPS_pubmethodHashtable(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.

System_CAPS_pubmethodHashtable(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.

System_CAPS_pubmethodHashtable(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.

System_CAPS_pubmethodHashtable(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.

System_CAPS_pubmethodHashtable(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.

System_CAPS_pubmethodHashtable(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.

System_CAPS_pubmethodHashtable(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.

System_CAPS_pubmethodHashtable(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.

System_CAPS_pubmethodHashtable(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.

System_CAPS_pubmethodHashtable(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.

System_CAPS_pubmethodHashtable(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.

System_CAPS_pubmethodHashtable(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.

System_CAPS_pubmethodHashtable(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.

System_CAPS_pubmethodHashtable(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.

System_CAPS_protmethodHashtable(SerializationInfo, StreamingContext)

Inicializa una nueva instancia vacía de la clase Hashtable que es serializable, utilizando los objetos SerializationInfo y StreamingContext especificados.

NombreDescripción
System_CAPS_protpropertycomparer

Obsoleto. Obtiene o establece el objeto IComparer que se usará para Hashtable.

System_CAPS_pubpropertyCount

Obtiene el número de pares clave-valor incluidos en Hashtable.

System_CAPS_protpropertyEqualityComparer

Obtiene el IEqualityComparer que se va a utilizar para Hashtable.

System_CAPS_protpropertyhcp

Obsoleto. Obtiene o establece el objeto que puede dispensar códigos hash.

System_CAPS_pubpropertyIsFixedSize

Obtiene un valor que indica si la interfaz Hashtable tiene un tamaño fijo.

System_CAPS_pubpropertyIsReadOnly

Obtiene un valor que indica si Hashtable es de solo lectura.

System_CAPS_pubpropertyIsSynchronized

Obtiene un valor que indica si el acceso a la interfaz Hashtable está sincronizado (es seguro para subprocesos).

System_CAPS_pubpropertyItem[Object]

Obtiene o establece el valor asociado a la clave especificada.

System_CAPS_pubpropertyKeys

Obtiene un ICollection que contiene las claves de Hashtable.

System_CAPS_pubpropertySyncRoot

Obtiene un objeto que se puede usar para sincronizar el acceso a Hashtable.

System_CAPS_pubpropertyValues

Obtiene un ICollection que contiene los valores de Hashtable.

NombreDescripción
System_CAPS_pubmethodAdd(Object, Object)

Agrega un elemento con la clave y el valor especificados a Hashtable.

System_CAPS_pubmethodClear()

Quita todos los elementos de Hashtable.

System_CAPS_pubmethodClone()

Crea una copia superficial de la colección Hashtable.

System_CAPS_pubmethodContains(Object)

Determina si Hashtable contiene una clave específica.

System_CAPS_pubmethodContainsKey(Object)

Determina si Hashtable contiene una clave específica.

System_CAPS_pubmethodContainsValue(Object)

Determina si Hashtable contiene un valor específico.

System_CAPS_pubmethodCopyTo(Array, Int32)

Copia los elementos de Hashtable a una instancia unidimensional de Array en el índice especificado.

System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_protmethodFinalize()

Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Heredado de Object).

System_CAPS_pubmethodGetEnumerator()

Devuelve un objeto IDictionaryEnumerator que itera a través del objeto Hashtable.

System_CAPS_protmethodGetHash(Object)

Devuelve el código hash de la clave especificada.

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Implementa la interfaz de ISerializable y devuelve los datos necesarios para serializar Hashtable.

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_protmethodKeyEquals(Object, Object)

Compara un Object específico con una clave concreta en Hashtable.

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object).

System_CAPS_pubmethodOnDeserialization(Object)

Implementa la interfaz ISerializable y genera el evento de deserialización cuando esta ha finalizado.

System_CAPS_pubmethodRemove(Object)

Quita el elemento con la clave especificada de Hashtable.

System_CAPS_pubmethodSystem_CAPS_staticSynchronized(Hashtable)

Devuelve un contenedor sincronizado (seguro para subprocesos) para el objeto Hashtable.

System_CAPS_pubmethodToString()

Devuelve una cadena que representa al objeto actual. (Heredado de Object).

NombreDescripción
System_CAPS_pubinterfaceSystem_CAPS_privmethodIEnumerable.GetEnumerator()

Devuelve un enumerador que recorre en iteración una colección.

NombreDescripción
System_CAPS_pubmethodAsParallel()

Sobrecargado. Habilita la paralelización de una consulta.(Definido por ParallelEnumerable).

System_CAPS_pubmethodAsQueryable()

Sobrecargado. Convierte un IEnumerable para un IQueryable.(Definido por Queryable).

System_CAPS_pubmethodCast<TResult>()

Convierte los elementos de un IEnumerable al tipo especificado.(Definido por Enumerable).

System_CAPS_pubmethodOfType<TResult>()

Filtra los elementos de un IEnumerable basado en un tipo especificado.(Definido por Enumerable).

System_CAPS_noteNota

Para ver el código fuente de .NET Framework para este tipo, consulte el Reference Source. Puede examinar el código fuente en línea, descargar la referencia para visualizarlo sin conexión y paso a paso el código fuente (incluidas revisiones y actualizaciones) durante la depuración; see instructions.

Cada elemento es un par de clave/valor que se almacena en un DictionaryEntry objeto. No puede ser una clave null, pero puede ser un valor.

Los objetos utilizados como claves por un Hashtable es necesario que invalide la Object.GetHashCode método (o la IHashCodeProvider interfaz) y la Object.Equals método (o el IComparer interfaz). La implementación de métodos e interfaces debe tratar entre mayúsculas y minúsculas del mismo modo; en caso contrario, la Hashtable comportamiento podría ser incorrecto. Por ejemplo, al crear un Hashtable, debe utilizar el CaseInsensitiveHashCodeProvider clase (o cualquier entre mayúsculas y minúsculas IHashCodeProvider implementación) con el CaseInsensitiveComparer clase (o cualquier entre mayúsculas y minúsculas IComparer implementación).

Además, estos métodos deben dar los mismos resultados cuando se llama con los mismos parámetros mientras la clave existe en el Hashtable. Una alternativa consiste en utilizar un Hashtable constructor con un IEqualityComparer parámetro. Si la igualdad de clave fuera solamente igualdad de referencia, la implementación heredada de Object.GetHashCode y Object.Equals sería suficiente.

Objetos de clave deben ser inmutables siempre y cuando se usan como claves en el Hashtable.

Cuando se agrega un elemento a la Hashtable, el elemento se coloca en un depósito en función del código hash de la clave. Las búsquedas subsiguientes de la clave utilizarán el código hash de la clave para buscar en solo un depósito concreto, lo que reduce considerablemente el número de comparaciones claves necesarias para buscar un elemento.

El factor de carga de un Hashtable determina la relación máxima de elementos por sectores de almacenamiento. Factores de carga más pequeños provocar tiempos de con mayor rapidez promedio búsqueda a costa de consumo de memoria mayor. El factor de carga predeterminado de 1,0 suele proporciona el mejor equilibrio entre la velocidad y tamaño. También puede ser un factor de carga diferente especificado cuando el Hashtable se crea.

Cuando se agregan elementos a un Hashtable, el factor de carga real de la Hashtable aumenta. Cuando el factor de carga real alcanza el factor de carga especificado, el número de depósitos en la Hashtable aumenta automáticamente hasta el número primo más pequeño que es mayor que el doble del número actual de Hashtable depósitos.

Cada objeto de clave en el Hashtable debe proporcionar su propia función hash, que se puede acceder mediante una llamada a GetHash. Sin embargo, cualquier objeto que implemente IHashCodeProvider puede pasarse a una Hashtable constructor y que se usa la función hash para todos los objetos de la tabla.

La capacidad de un Hashtable es el número de elementos de la Hashtable puede contener. Cuando se agregan elementos a un Hashtable, la capacidad aumenta automáticamente según sea necesario mediante la reasignación.

Para un gran Hashtable objetos, puede aumentar la capacidad máxima de 2 millones de elementos en un sistema de 64 bits estableciendo la enabled atributo del elemento de configuración para true en el entorno de tiempo de ejecución.

El foreach instrucción del lenguaje C# (For Each en Visual Basic) devuelve un objeto del tipo de los elementos de la colección. Puesto que cada elemento de la Hashtable es un par clave/valor, el tipo de elemento no es el tipo de la clave o el tipo del valor. En su lugar, el tipo de elemento es DictionaryEntry. Por ejemplo:

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

El foreach instrucción es un contenedor del enumerador, que sólo permite la lectura de no escritura a la colección.

Dado que serializar y deserializar un enumerador para una Hashtable puede hacer que los elementos que se van a ordenar de nuevo se convierten en, no es posible continuar la enumeración sin llamar a la Reset método.

System_CAPS_noteNota

Dado que las claves se pueden heredar y su comportamiento puede cambiar, no se puede garantizar su unicidad absoluta mediante comparaciones utilizando el Equals método.

En el ejemplo siguiente se muestra cómo crear, inicializar y realizan diversas funciones para un Hashtable y cómo imprimir 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.
 */

Plataforma universal de Windows
Disponible desde 10
.NET Framework
Disponible desde 1.1

Hashtablees un subproceso seguro para su uso por varios subprocesos de lector y un único subproceso de escritura. Es seguro para subprocesos multiproceso use cuando solo uno de los subprocesos realizan operaciones de escritura (actualización), que permite lecturas sin bloqueo siempre que se serializan los sistemas de escritura a la Hashtable. Para admitir todas las operaciones de varios sistemas de escritura en el Hashtable debe realizarse a través del contenedor devuelto por el Synchronized método, proporcionado que no hay ningún subproceso leyendo el Hashtable objeto.

Enumerar una colección no es intrínsecamente un procedimiento seguro para subprocesos. Incluso cuando una colección está sincronizada, otros subprocesos todavía pueden modificarla, lo que hace que el enumerador produzca una excepción. Con el fin de garantizar la seguridad para la ejecución de subprocesos durante la enumeración, se puede bloquear la colección durante toda la enumeración o detectar las excepciones resultantes de los cambios realizados por otros subprocesos.

Volver al principio
Mostrar: