Llenar y Recorrer un HashTable

Una Hastable es una tabla (que utiliza la interface IDictionary) y lo que hace es guardar un par (clave y valor) NO de manera secuencial es decir uno atrás de otro dentro de la tabla sino usando internamente una tabla Hash, esto es importante porque cuando uno está programando no tiene que creer que los datos dentro de la HashTable están “uno al lado del otro” por decirlo en criollo sino que están guardados internamente según el código Hash numérico de la clave. La ventaja es obvia, cuando se tenga que buscar esa clave no se va a recorrer la tabla secuencialmente sino se buscará directamente por su código Hash.

Se puede asignar en el constructor del objeto hashtable un valor de carga inicial, esto lo que haces es reducir el número de colisiones para las inserciones. Asignar un gran número de carga inicial no sera una ventaja a la hora de la busqueda pero si lo será la hora de las inserciones en la tabla.

‘le asigno 1000 de capacidad inicial
Dim phsMyHash As New Hashtable(1000)

También puede asignar al constructor un factor de Carga esto mide las relaciones entre valor y slot, mientras menor sea este número mas memoria interna usa para producir menos colisiones cuando este insertando o buscando. El predeterminado es 1,0.

‘le asigno 1000 de capacidad inicial y factor de carga 0.8
Dim phsMyHash As New Hashtable(1000, 0.8)

Un simple ejemplo de carga y de recorrido:
Para las inserciones:

‘le asigno 10 de capacidad inicial y factor de carga 0.5, a la azar
Dim phsMyHash As New Hashtable(10, 0.5)

phsMyHash.Add(“Ricky”, 1500)
phsMyHash.Add(“Albin”, 1600)
phsMyHash.Add(“Rober”, 1200)
phsMyHash.Add(“Santi”, 1900)

Para recorrer y mostrar los datos en un WebForm utilizo un objeto DictonaryEntry

For Each pde As DictionaryEntry In phsMyHash
Response.Write(“<div>Clave :” & pde.Key & ” Valor: ” & pde.Value & “</div><p>”)
Next

Este es el resultado devuelto:
Clave :Ricky Valor: 1500
Clave :Santi Valor: 1900
Clave :Rober Valor: 1200
Clave :Albin Valor: 1600

Y si le doy nuevos valores al constructor por ejemplo estos:
Dim phsMyHash As New Hashtable(100, 0.9)

Este es el resultado devuelto:
Clave :Ricky Valor: 1500
Clave :Rober Valor: 1200
Clave :Santi Valor: 1900
Clave :Albin Valor: 1600

Por ultimo un dato interesante es que las hastable por defecto SI distinguen entre minuscula y mayuscula por lo cual esta clave “Cuarteto” es distinta de esta otra “cuarteto”, para hacer su comportamiento indiferente se debe instanciar de la siguiente manera, usando el método CreateCaseInsensensitiveHashtable:

Dim phsMyHash As Hashtable = _
Specialized.CollectionsUtil.CreateCaseInsensitiveHashtable()

 

Saludos.

Anuncios

4 comentarios sobre “Llenar y Recorrer un HashTable

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s