En esta sesion, vimos un poco de lo que contienen los namespaces | nombres de espacio
System.Collections
System.Collections.Specialized
System.Collections.Generic

Especificamente, tocamos las clases:
ArrayList  ,  Hashtable  ,  Queue  ,  Stack  ,  NameValueCollection  ,  StringDictionary

ArrayList – ArrayList  –  ArrayList

Esta es una coleccion donde podemos guardar cualquier tipo de objeto.  Su metodo ArrayList.Add() acepta el tipo object, por lo cual podemos coleccionar enteros, cadenas, listboxes, botones, y casi cualquier cosa que se nos ocurra…  El acceso a sus elementos se logra por medio de la posicion o indice.  Podemos utilizar su propiedad ArrayList.Count para preguntarle a la coleccion cuantos elementos tiene, y de esta forma iterarla por ejemplo de esta manera:

for(int i = 0; i < myArrayList.Count; i++) { //acceso: MyArrayList[i] }

..el aceptar cualquier objeto, nos da la posibilidad de mezclar tipos en la misma coleccion, que en algunas ocasiones puede ser util, pero la mayoria de las veces esconde errores que no pueden detectarse sino hasta en tiempo de ejecucion (run-time); y hasta cierto punto se opone a las “mejores practicas” (best practices) de la programacion orientada a objetos.

Hashtable  –  Hashtable  – Hashtable

Con Hashtable, podemos coleccionar objetos (al igual que con ArrayList), pero estos no podemos accesarlos por indice | posicion.  Al igual que ArrayList, Hashtable cuenta con el metodo Hashtable.Add() y la propiedad Hashtable.Count.  El metodo Hashtable.Add() nos requiere dos parametros de tipo object.  El primero es una llave unica que Hashtable utiliza para nombrar al elemento que se le pasa en el segundo objeto.

Hashtable.Add(object key, object value)

Como no podemos accesar los elementos por indice como con el ArrayList, debemos proporcionar al Hashtable un objeto, con el cual buscara si hay un elemento asociado a ese objeto (llave unica) para proporcionarnoslo;  en caso de que el objeto (llave unica) que proporcionemos no exista en el Hashtable, nos regresara un objeto null | nulo.  Con llave unica se entiende que solo puede haber un elemento asociado a esta llave, de tal manera que si se agrega al Hashtable un elemento nuevo, pero se asocia a una llave ya existente, el nuevo elemento reemplazara al que ya teniamos coleccionado.

En caso de querer iterar los elementos de un Hashtable, podemos recurrir a la siguiente tecnica:

enumerator technique

Hashtable nos proporciona un enumerador (IEnumerator) por medio de su metodo HashTable.GetEnumerator().  Este enumerador podemos iterarlo ayudandonos de su metodo IEnumerator.MoveNext() y convirtiendo su propiedad IEnumerator.Current a un objeto tipo DictionaryEntry, el cual contiene la llave y el objeto original que pusimos en el Hashtable.