martes, 20 de marzo de 2012

Colleciones en Java (Set y HashMap)

Bueno señores continuando con las colecciones en java hoy veremos unas estructuras las cuales son muy utiles en algunos casos,en el post anterior vimos las listas y sus tipos y operaciones mas comunes.Bien empezemos con la collecion SET.

La colleccion SET es un conjunto de datos los cuales no puede contener duplicados en su conjunto de datos. veamos un ejemplo.
Cuando lo hemos declarado lo podemos llenar con los tipos de datos con que hemos inicializado el conjunto si ven en el bucle lo llenamos hasta el numero 9,luego intentamos añadir un objeto que ya existe en la coleccion lo cual no se añadira luego vemos que insertamos un valor que no existe en nuesto conjunto veamos la salida del ejemplo.
Si observamos inserto el dato que no existia en nuesto conjunto.

Esta coleccion tambien puede ser del tipo objeto lo cual les muestro un ejemplo tomando como referencia la clase del anterior ejemplo UsuarioEntidad.

Como vemos creamos 3 objetos los cuales llenamos la informacion y los añadimos a nuestro conjunto antes de recorrer el conjunto nos fijamos que intentamos añadir el objeto1 que ya existe en nuestra coleccion lo cual no lo añadira como lo muestra la salida.

Bien pero cuando decimos un dato repetido significa al mismo objeto no a otro objeto diferente con la misma informacion de algun objeto existente dentro del conjunto como lo muestra la siguiente imagen.
Asi que tener cuidado cuando dice que no soporta datos repetidos se refiere al objeto en memoria almacenado no a otro objeto con la misma informacion.

La otra coleccion es el HashMap :Es el tipo de mapeo más sencillo y probablemente el más usado. Es la clase a utilizar si queremos asociar pares de claves y valores sin orden, sin más. Internamente, como su nombre indica, utiliza un hash para almacenar la clave. No permite claves duplicadas, pero si utilizar null como clave.

La operacion basica es llenarlo y mostrarlo como lo vemos en la imagen:
Aca no tenemos que repetir claves,la coleccion se expande como las demas.Para recorrerlo usamos un Iterador,luego declaramos un mapEntry para luego castear el next del iterador y poder obtener la clave y el valor.

Tambien podemos ordenarlo por clave y valor,veamos como se ordena por clave:
En esta parte tendremos que usar un TreeMap:En el que los pares clave-valor se almacenan en un árbol ordenado según los valores de las claves. Como es de esperar es la clase más lenta a la hora de añadir nuevos elementos, pero también a la hora de accederlos.Luego obtenemos un set de claves ordenados los cuales los podemos recorrer con el iterador.Y tenemos la siguiente salida.
Si lo queremos ordenar por valor se hace este procedimiento:
Aca hacemos uso de un LinkedHashMap:Es una clase introducida con el J2SE 1.4 que extiende HashMap y utiliza una lista doblemente enlazada para poder recorrer los elementos de la colección en el orden en el que se añadieron. Esta clase es ligeramente más rápida que HashMap a la hora de acceder a los elementos, pero es algo más lenta al añadirlos.

Creamos dos listas una que nos almacene las claves y los valores,Luego declaramos un TreeSet: el cual mantiene una lista ordenada,TreeSet almacena sus elementos en un árbol y que se organizan automáticamente en un orden determinado.TreeSet no está sincronizado. Si hay más de un hilo desea acceder a ella, al mismo tiempo, entonces debe ser sincronizado externamente.Luego nuestro TreeSet lo convertimos en array.para poder recorrerlo y llenar el LinkedHashMap siempre lleva la misma logica clave y valor solo que lo llenara en orden por valor,al final obtenemos el iterador por valor  y lo recorremos y obtendremos los valores ordenados y veremos la siguiente salida.
Bien hemos hecho uso de varias colecciones las cuales nos facilitan el trabajo siempre hay que pensar que algunas estructuras son mas lentas y otras mas rapidas unas que estan sincronizadas y otras que toca sincronizarlas espero que haya sido de ayuda.
Descargar
Comenten no sean bayuncos...

No hay comentarios:

Publicar un comentario