Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
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.

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.

  NombreDescripción
Método públicoCompatible con XNA FrameworkHashtable()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úblicoCompatible con XNA FrameworkHashtable(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úblicoCompatible con XNA FrameworkHashtable(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úblicoCompatible con XNA FrameworkHashtable(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úblicoCompatible con XNA FrameworkHashtable(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úblicoCompatible con XNA FrameworkHashtable(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úblicoCompatible con XNA FrameworkHashtable(IHashCodeProvider, IComparer) Obsoleta. 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úblicoCompatible con XNA FrameworkHashtable(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úblicoCompatible con XNA FrameworkHashtable(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 protegidoHashtable(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úblicoCompatible con XNA FrameworkHashtable(IDictionary, IHashCodeProvider, IComparer) Obsoleta. 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.
Método públicoCompatible con XNA FrameworkHashtable(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úblicoCompatible con XNA FrameworkHashtable(Int32, IHashCodeProvider, IComparer) Obsoleta. 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úblicoCompatible con XNA FrameworkHashtable(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úblicoHashtable(IDictionary, Single, IHashCodeProvider, IComparer) Obsoleta. 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úblicoHashtable(Int32, Single, IHashCodeProvider, IComparer) Obsoleta. 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

  NombreDescripción
Propiedad protegidaCompatible con XNA Frameworkcomparer Obsoleta. Obtiene o establece el objeto IComparer que se utilizará para Hashtable.
Propiedad públicaCompatible con XNA FrameworkCountObtiene el número de pares clave-valor incluidos en la colección Hashtable.
Propiedad protegidaCompatible con XNA FrameworkEqualityComparerObtiene el IEqualityComparer que se va a utilizar para Hashtable.
Propiedad protegidaCompatible con XNA Frameworkhcp Obsoleta. Obtiene o establece el objeto que puede dispensar códigos hash.
Propiedad públicaCompatible con XNA FrameworkIsFixedSizeObtiene un valor que indica si la interfaz Hashtable tiene un tamaño fijo.
Propiedad públicaCompatible con XNA FrameworkIsReadOnlyObtiene un valor que indica si Hashtable es de sólo lectura.
Propiedad públicaCompatible con XNA FrameworkIsSynchronizedObtiene un valor que indica si el acceso a la interfaz Hashtable está sincronizado (es seguro para subprocesos).
Propiedad públicaCompatible con XNA FrameworkItemObtiene o establece el valor asociado a la clave especificada.
Propiedad públicaCompatible con XNA FrameworkKeysObtiene una ICollection que contiene las claves de Hashtable.
Propiedad públicaCompatible con XNA FrameworkSyncRootObtiene un objeto que se puede utilizar para sincronizar el acceso a Hashtable.
Propiedad públicaCompatible con XNA FrameworkValuesObtiene una interfaz ICollection que contiene los valores de la interfaz Hashtable.
Arriba

  NombreDescripción
Método públicoCompatible con XNA FrameworkAddAgrega un elemento con la clave y el valor especificados a Hashtable.
Método públicoCompatible con XNA FrameworkClearQuita todos los elementos de Hashtable.
Método públicoCompatible con XNA FrameworkCloneCrea una copia superficial de la colección Hashtable.
Método públicoCompatible con XNA FrameworkContainsDetermina si Hashtable contiene una clave específica.
Método públicoCompatible con XNA FrameworkContainsKeyDetermina si Hashtable contiene una clave específica.
Método públicoCompatible con XNA FrameworkContainsValueDetermina si la interfaz Hashtable contiene un valor específico.
Método públicoCompatible con XNA FrameworkCopyToCopia los elementos de Hashtable a una instancia unidimensional de Array en el índice especificado.
Método públicoCompatible con XNA FrameworkEquals(Object)Determina si el objeto especificado es igual al objeto actual. (Se hereda de Object).
Método protegidoCompatible con XNA FrameworkFinalize 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úblicoCompatible con XNA FrameworkGetEnumeratorDevuelve un IDictionaryEnumerator que recorre en iteración Hashtable.
Método protegidoCompatible con XNA FrameworkGetHashDevuelve el código hash de la clave especificada.
Método públicoCompatible con XNA FrameworkGetHashCode Sirve como una función hash para un tipo en particular. (Se hereda de Object).
Método públicoGetObjectDataImplementa la interfaz de ISerializable y devuelve los datos necesarios para serializar Hashtable.
Método públicoCompatible con XNA FrameworkGetType Obtiene el Type de la instancia actual. (Se hereda de Object).
Método protegidoCompatible con XNA FrameworkKeyEqualsCompara un Object específico con una clave concreta en Hashtable.
Método protegidoCompatible con XNA FrameworkMemberwiseClone Crea una copia superficial del Object actual. (Se hereda de Object).
Método públicoOnDeserializationImplementa la interfaz ISerializable y genera el evento de deserialización cuando esta ha finalizado.
Método públicoCompatible con XNA FrameworkRemoveQuita el elemento con la clave especificada de la interfaz Hashtable.
Método públicoMiembro estáticoCompatible con XNA FrameworkSynchronizedDevuelve un contenedor sincronizado (seguro para subprocesos) para el objeto Hashtable.
Método públicoCompatible con XNA FrameworkToString Retorna una cadena que representa al objeto actual. (Se hereda de Object).
Arriba

  NombreDescripción
Método de extensión públicoAsParallelHabilita la paralelización de una consulta. (Definido por ParallelEnumerable).
Método de extensión públicoAsQueryableConvierte una interfaz IEnumerable en IQueryable. (Definido por Queryable).
Método de extensión públicoCompatible con XNA FrameworkCast<TResult>Convierte los elementos de IEnumerable en el tipo especificado. (Definido por Enumerable).
Método de extensión públicoCompatible con XNA FrameworkOfType<TResult>Filtra los elementos de IEnumerable en función de un tipo especificado. (Definido por Enumerable).
Arriba

  NombreDescripción
Implementación explícita de interfacesMétodo privadoCompatible con XNA FrameworkIEnumerable.GetEnumeratorDevuelve 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 una colección Hashtable es el número de elementos que dicha Hashtable puede contener. Conforme se agregan elementos a Hashtable, la capacidad aumenta automáticamente según lo requiera la reasignación.

Para los objetos muy grandes de Hashtable , puede aumentar la capacidad máxima a 2 millones de elementos en un sistema de 64 bits estableciendo el atributo de enabled del elemento de configuración de gcAllowVeryLargeObjects a true en el entorno de tiempo de ejecució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.

NotaNota

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.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

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

Por su naturaleza, la enumeración mediante una colección no es 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. Con el fin de garantizar la seguridad para la ejecución de subprocesos durante la enumeración, es posible bloquear la colección durante toda la enumeración o detectar las excepciones provocadas por los cambios que efectúen otros subprocesos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft