C# Tabla hash (Hashtable)

C# 集合Colecciones de C#

En C#, la tabla hash (Hashtable) es una colección que almacena datos en forma de pares clave-valor (key=>value), las claves y los valores pueden ser cualquier objeto.

Cada elemento de la tabla hash tiene unkey=>valuepar clave-valor, y la clave se utiliza para acceder a los elementos de la colección.

La tabla hash organiza y accede a los datos basándose en un algoritmo hash, proporcionando operaciones eficientes de búsqueda, inserción y eliminación.

HashtableEs una colección no genérica, ubicada en el espacio de nombresSystem.Collections. Si se necesita una versión genérica, se puede utilizarDictionary<TKey, TValue>。

Estructura básica:

  • Tecla(Key): Se utiliza para identificar cada elemento de datos, debe ser única y no puede sernull。
  • Valor(Value): Los datos correspondientes a la clave, pueden sernull。

Características:

  • Almacenamiento de pares clave-valor: Cada clave es única y está asociada con un valor.
  • Algoritmo hash: Localiza la posición de almacenamiento de los datos mediante el código hash de la clave; la complejidad temporal promedio de las operaciones de búsqueda e inserción es O(1).
  • Ajuste dinámico de capacidad: Cuando el número de elementos en la tabla hash supera la capacidad, la tabla se expande dinámicamente y reasigna el almacenamiento.
  • Almacenamiento sin orden: El orden de almacenamiento de los pares clave-valor no está relacionado con el orden de inserción, sino que está determinado por el código hash.

Métodos y propiedades de la clase Hashtable

La siguiente tabla enumeraHashtablealgunas de uso común de la clasepropiedades:

Nombre de la propiedadTipoDescripción
CountintObtiene el número de pares clave-valor contenidos en la tabla hash.
IsReadOnlyboolIndica si la tabla hash es de solo lectura.
IsFixedSizeboolIndica si la tabla hash tiene un tamaño fijo.
IsSynchronizedboolIndica si la tabla hash es segura para subprocesos.
KeysICollectionObtiene la colección de todas las claves de la tabla hash.
ValuesICollectionObtiene la colección de todos los valores de la tabla hash.
SyncRootobjectObtiene un objeto que se puede utilizar para sincronizar el acceso a la tabla hash.

La siguiente tabla enumeraHashtablealgunos de uso común de la clasemétodos:

Nombre del métodoTipo de retornoDescripción
Agregar y eliminar
Add(object key, object value)voidAgrega el par clave-valor especificado a la tabla hash.
Clear()voidVacía la tabla hash.
Remove(object key)voidElimina el par clave-valor de la clave especificada.
Consulta y acceso
Contains(object key)boolDetermina si la tabla hash contiene la clave especificada.
ContainsKey(object key)boolDetermina si la tabla hash contiene la clave especificada (equivalente aContains)。
ContainsValue(object value)boolDetermina si la tabla hash contiene el valor especificado.
Copia y enumeración
CopyTo(Array array, int index)voidCopia los elementos de la tabla hash a una matriz, comenzando en el índice especificado.
GetEnumerator()IDictionaryEnumeratorDevuelve un enumerador de la tabla hash para recorrer los pares clave-valor.

Ejemplo

El siguiente ejemplo demuestra el concepto de la tabla hash (Hashtable):

Ejemplo

using System;
using System.Collections;

namespace CollectionsApplication
{
   class Program
   {
      static void Main(string[] args)
      {
         Hashtable ht = new Hashtable();


         ht.Add("001", "Zara Ali");
         ht.Add("002", "Abida Rehman");
         ht.Add("003", "Joe Holzner");
         ht.Add("004", "Mausam Benazir Nur");
         ht.Add("005", "M. Amlan");
         ht.Add("006", "M. Arif");
         ht.Add("007", "Ritesh Saikia");

         if (ht.ContainsValue("Nuha Ali"))
         {
            Console.WriteLine("This student name is already in the list");
         }
         else
         {
            ht.Add("008", "Nuha Ali");
         }
         // Obtener la colección de claves
         ICollection key = ht.Keys;

         foreach (string k in key)
         {
            Console.WriteLine(k + ": " + ht[k]);
         }
         Console.ReadKey();
      }
   }
}

Cuando el código anterior se compila y ejecuta, produce los siguientes resultados:

007: Ritesh Saikia
004: Mausam Benazir Nur
005: M. Amlan
008: Nuha Ali
002: Abida Rehman
003: Joe Holzner
001: Zara Ali
006: M. Arif

Comparación con otras colecciones

CaracterísticaHashtableDictionary<TKey, TValue>
Seguridad de tiposNo (no genérico, almacenaobjecttipo)Sí (genérico, restricción de tipo fuerte)
RendimientoMás lento (requiere operaciones de boxing y unboxing)Más rápido (sin operaciones de boxing, los genéricos admiten tipos directamente)
Unicidad de la claveSíSí
Si el valor puede sernullSíSí
OrdenaciónNingunoNinguno
Seguridad para subprocesosNo seguro para subprocesos de forma predeterminadaNo seguro para subprocesos de forma predeterminada
  • HashtableEs una colección de pares clave-valor eficiente, adecuada para escenarios que requieren almacenamiento y recuperación rápidos de pares clave-valor.
  • La versión no genéricatiene un diseño que la hace inferior a las colecciones de versión genérica en seguridad de tipos y rendimiento (comoDictionary<TKey, TValue>)。
  • En el desarrollo moderno de C#,Dictionary<TKey, TValue>se usa más frecuentemente, peroHashtabletodavía es adecuada para aplicaciones simples o escenarios de compatibilidad con código heredado.

C# 集合Colecciones de C#

Otras extensiones