Una tabla hash o Hash Table, es una colección que permite almacenar pares de objetos, donde el primero es conocido como llave (key) y el segundo es conocido como valor (value). De esta manera, para agregar “un” elemento a la colección, siempre se debe pasar como argumento estos dos objetos.
Una de las ventajas que presenta ésta colección frente a las colecciones mencionadas anteriormente (Parte I: Vectores, Parte II: ArrayList, Parte III: Stack y Queue), es el poco tiempo que tarda en realizar la búsqueda de un elemento determinado, debido a que utiliza el hash de las llaves (keys) para ordenar los elementos, permitiendo así, tener una ubicación única para cada uno.
Un Hash consiste en pocas palabras, en un código único generado por una función Hash, la cual genera una salida única para entradas diferentes y además, produce la misma salida para entradas iguales. Por estas características de una función Hash, no pueden haber llaves iguales en la tabla Hash ya que esto produciría el mismo Hash y no seria posible diferenciar unívocamente los elementos de la colección.
El comportamiento de la HashTable se puede comparar a una tabla de una base de datos relacional, donde cada tabla generalmente (en este caso obligatoriamente) tiene una llave primaria por medio de la cual se diferencia cada registro de los demás y que además su valor debe ser único en toda la tabla. De la misma manera se comporta la HashTable ya que los elementos son ordenados según su Hash.
Cuando sea necesario obtener uno de los elementos contenidos en la HashTable, se debe utilizar la llave o key con la que fue almacenada, como se muestra a continuación:
Siempre que se referencia la HashTable utilizando una Key, será retornado el valor correspondiente a dicha clave en un objeto de tipo Object, por lo que es importante convertir el dato obtenido al tipo de dato adecuado para evitar generar excepciones.
Lo anterior, permite tener en la colección pares de llaves y valor que pertenezcan a tipos de datos diferentes, es decir, nada nos obliga a que todos los elementos del HashTable sean del mismo tipo. Incluso las llaves (keys) y los valores (values), pueden ser de tipos de datos diferentes entre si. Sin embargo, no es muy recomendable utilizar la HashTable de esta manera, ya que eso implicaría conocer exactamente que elementos están incluidos en la HashTable e implicaría tener mucho mas cuidado a la hora de extraer los datos, lo cual impediría que la aplicación sea flexible y escalable.
En el ejemplo anterior se ve como se puede ingresar llaves y valores de diferentes tipos de datos. Además se puede ver como es posible ingresar un valor de tipo null, lo cual no es posible hacerlo en una de las llaves ya que se generaría la excepción ArgumentNullException.
Utilizando la sintaxis “[key]” (por ejemplo: tabla["llave texto"]) sobre una tabla Hash, es posible actualizar el valor contenido o en caso de que la llave utilizada no exista en la tabla, se inserta este nuevo elemento.
La clase HashTable pertenece al espacio de nombres System.Collections e implementa las colecciones IEnumerable, ICollection, entre otras. Debido a esto, es posible utilizar la instrucción foreach para leer datos de una HashTable. Sin embargo, en cada iteracion de esta instrucción, se debe operar con un objeto de tipo DictionaryEntry que contendrá un par llave/valor.
Algunos de los métodos mas utilizados de la clase HashTable son:
Add: permite agregar un nuevo par llave/valor a la colección.
Remove: permite quitar un par llave/valor de la colección
ContainsKey: permite saber si la colección contiene un par cuya clave sea la que se le pasa como parámetro.
ContainsValue: permite saber si la colección contiene un par cuyo valor sea el que se le pasa como parámetro.

donde esta la clase
Por: Miguel el Miércoles, Junio 3, 2009
a las 10:46 pm
ps explicado si se entiende pero la clase no
Por: Miguel el Miércoles, Junio 3, 2009
a las 10:47 pm
Pues lo siento amigo si no lo entiendes, esta clarito en el post. La clase está en el namespace System.Collections y en la entrada se explica para que sirve y como se utiliza. Si tienes alguna duda concreta y te puedo ayudar con gusto lo haré
Por: Anónimo el Jueves, Junio 4, 2009
a las 8:24 am
bueno de todas formas gracias, pero dudo entrar otravez a la pagina XD pero Si lo pones creo q´ les serviria a los demas
Por: Miguel el Miércoles, Junio 3, 2009
a las 10:51 pm