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...

jueves, 15 de marzo de 2012

Uso De Listas en Java (ArraysList)

Bien señores despues de descubrir todo lo bonito que tiene java en el lado de las colecciones,es hora de aprender a usarlas,No las explicare todas,solamente las que yo uso mas y que creo que son importantes,no es que las demas esten de estorbo pero en alguna situacion pueda que las tengamos que usar,pero explicare las que mas uso yo a menudo.

La clase ArrayList (java.util) es una objeto lista que implemente la interfaz Collection de java. Esta clase permite contener y ordenar objetos, incluso, puede almacenar objetos dupicados. Su tamaño es dinámico, es decir, esta lista crecera a medida que se inserten en ella mas elementos. Debememos recordar que el índice de un ArrayList empieza en 0, es decir, el primer elemento del ArrayList tiene como índice el 0.

Nota: Los objetos ArrayList se comportan igual que un objeto Vector desincronizado, por lo tanto, un ArrayList se ejecuta mas rápido que un Vector, ya que el ArrayList no tiene que implementar los métodos de sincronización de procesos.

Ahora veamos los usos mas comunes que les doy yo:
Crear Llenar y Mostrar.

Bien cuando la creamos le indicamos un tipo de lista a crear en este caso sera una lista de tipo Integer,que quiere decir eso que solo podra contener datos enteros,el Tamaño sera creciente.

Luego llenamos las lista con un for simple el cual el contador se agregara a la lista,usamos el nombre de la lista.add(y el elemento a agregar).

Bien para mostrar el contenido de una lista existen varias formas de hacerlo la primera forma es con un for each como vemos en la imagen con la explicacion de la sintaxis de como debe estructurarse.Para mostrarla solo basta un println y usar el nombre de la variable que declaramos y los mostrara como en la siguiente imagen.

Y muestra el contenido de la Lista hay otra forma de hacerlo que es un Iterador como se muestra en la siguiente imagen.

Un Iterator o Iterador es un patrón de diseño que nos ofrece una interfaz estándar para recorrer una estructura de datos sin que nos tengamos que preocupar por la representación interna de los datos de dicha estructura.Una vez que tenemos nuestra lista nos bastará utilizar la clase Iterator para obtener un puntero que nos referencie a los elementos de la lista. En este punto tendremos que tener en cuenta que: el método hasNext() nos dice si hay más elementos y que el método .next() nos permite movernos al siguiente elemento. Y la salida sera exactamente igual que la anterior.

Para remover un objeto de la lista podemos hacerlo usando el metodo remove el cual nos pide como parametro la posicion donde esta el valor a eliminar acordemonos que la lista empieza con index 0,si nos pasamos de posicion a una que no existe no dara una excepcion,para realizar el eliminado de datos se hace como vemos en la imagen.
Cuando lo ejecutemos nos damos cuenta que quito el elemento que nosotros removimos de la lista como la siguiente imagen.

Tambien tenemos la opcion de Insertar una coleccion completa del mismo tipo a una lista vacia,y insertar datos manualmente usando el metodo add que tiene nuestra lista.Una de las funciones que tambien uso frecuentemente es ordenar los datos que tiene dicha lista, de forma ascendente o descendente en este caso son valores numericos como lo vemos en la siguiente imagen.
Declaramos otra lista del mismo tipo para asignarsela la lista existente que habiamos creado antes luego le añadimos 3 datos mas los cuales hacen que nuestra lista este desordenada,Para ordenar la lista usamos la clase Collections y el metodo sort el cual nos pide en su constructor una lista y el nos la ordena de forma ascendente como vemos en la salida de la siguiente imagen.
Y listo ya ordenamos nuestra lista de enteros de menor a mayor,para ordenarla en el orden inverso de forma descendente agregamos la siguiente linea de codigo que descomentamos en la imagen.
Usamos la misma clase collections y el metodo sort solo que ahora usaremos otro constructor el cual nos pide la lista un tipo Comparator y le mandamos lo que retorna el metodo Collections.InverseOrder el cual devuelve un objeto Comparator de forma inversa y vemos la salida en la siguiente imagen.
Bien hasta aca es todo igual cuando se manejan listas de tipo de dato,la cosa cambia cuando necesitamos usar listas de objetos,lo cual nos ayuda a tener mas solido nuestro codigo a no perdernos a la hora de mostrar gran cantidad de informacion,Nosotros podemos crear listar de objetos los cuales en mi mayoria son mis JavaBeans o mis Entidades(Cuando se usa un ORM como Hibernate)  les mostrare el siguiente ejemplo.

Tenemos un JavaBeans del tipo Usuario el cual contiene como propiedades privadas codigo,nombre,usuario,pass y edad lo cual haremos una lista de esos objetos para almacenarlos y luego mostrarlos.

NOTA IMPORTANTE:Anteriormente Declaramos un:
 ArrayList listaImplementacion = new ArrayList();
Pues bien Como Buenos programadores que somos y que seguimos Patrones bien fundamentados La pagina de Oracle donde esta la documentacion oficial de java menciona que no debemos usar la implementacion sino la interfaz que es esta:
List listaInterface = new ArrayList();
Bien No lo digo yo en esta pagina en el parrafo 5 dice Como regla general, usted debe pensar acerca de las interfaces, no las implementaciones.Asi que les toca arreglar los Ejemplos de arriba jaaaa En realidad funciona de las dos maneras "FUNCIONA" pero no es recomendable por el rendimiento de tu aplicacion.

La imagen nos explica como crear una lista correctamente y llenarla en un bucle y luego mostrarla.
Adentro de nuestro bucle debemos crear un objeto del tipo con que declaramos la lista porque al momento de llenar la lista nos pedira un objeto de ese tipo no de otro.Para mostrarlo hacemos uso de un for each el cual donde nos pide el tipo de datos ponemos el tipo de objeto asi podemos desplegar la propiedad por propiedad.Y vemos la salida la imagen.
Luego de esto tambien podemos ingresar datos manualmente como se muestra en la imagen.

La situacion se complica un poco cuando manejamos listas de objetos porque en algunos casos nos tendremos que topar con que tenemos que ordenar esos datos,"algunos los que hacen es ordenarlos desde la base de datos"Pero nos fregamos cuando son calculados,lo primero que haremos es ordenar la informacion nueva que insertamos manualmente en orden ascendente por usuario esto quiere decir de la A a la Z.

Bien para hacer esto tenemos que usar la clase Colletions metodo sort le mandamos la lista de objetos y  luego Instanciamos un nuevo objeto Comparator y sobrescribimos el metodo compare para que haga lo que yo quiero hacer en este caso ordenar por usuario,el metodo devolvera un entero y como parametro dos objetos tipo Object,luego casteamos los tipo object por los tipo que nosotros hemos creado en este caso se llama UsuarioEntidad luego en return hacemos una comparacion con el metodo compareToIgnoreCase
realiza una comparación entre un String (en este caso) y otro objeto de tipo String sin importar si viene mayuscula o minuscula.Y tendremos la siguiente salida.
Y listo Ordenada una lista de objetos Facil solo era de leer un rato y ponerse a averiguar.Pero el problema no termina ahi Ahora si la propiedad de nuestro objeto no fuera String? como lo ordenaria pues aca lo resolvemos a continuacion.


Hacemos el mismo procedimiento solo que ahora en el retur hacemos un if ternario para los que no saben que son esos garabatos,los comprendo yo no sabia que eran pero ahora me son muy utiles estos if se usan cuando la expresion a evaluar es corta y un if doble.Devuelve -1 cuando es verdadero y se cumple que objeto 1 sea menor a objeto 2,sino evalua si objeto 1 es mayor a objeto 2 si eso se cumple devuelve 1 sino 0.Y tenemos la siguiente Salida.
Y listo ya lo ordenamos Bueno Espero que haya sido de mucha ayuda este post ya que es lo que yo he aprendido y lo que me ha tocado les dejo el archivo con el codigo el proyecto esta hecho en eclipse pero puede ejecutarlo en netbeans.


Comenten no sean Bayuncos....

lunes, 12 de marzo de 2012

Collecciones en Java

En este post estudiaremos que son las Colleciones en java ya que son de mucha ayuda aprenderlos a usar y compreder la diferencia de estas.Estas las encontramos en el  paquete java.util.


Conjunto de clases e interfaces usadas para:

  • Administrar colecciones de objetos.
  • Administrar la comunicacion entre objetos.
  • Manipular informacion de los objetos.
Colecciones son objetos que referencian a un grupo de objetos,a diferencia de los arreglos,
las colecciones solamente referencias a objetos de tipo object,cualquier objeto puede ser almacenado
en una coleccion.

Las colecciones pueden:

  • cambiar de tamaño dinamicamente.
  • proveer ordenamiento.
  • insertar y borrar elementos.

Tipos de colecciones:
Collection: Contenedor simple de objetos no ordenados,los duplicados son permitidos.

List: Contenedor de elementos ordenados,los duplicados son permitidos

Set: Coleccion desordenada de objetos,los duplicados no son permitidos

Map: Coleccion de pares:clave/valor,la clave es usada para indexar el elemento,los duplicados no son permitidos.

Y por ultimo dejo dos imagenes  la original y la traducida al español(espero que se entienda),la cual explica de manera efectiva los tipos de colecciones existentes.


Traduccion:
Comenten no sean Bayuncos....

martes, 6 de marzo de 2012

Operaciones Con Vectores Algoritmo

Cuando se estudian Estructuras de datos lo primero que nos da problemas son los arreglos de una dimension los cuales se les llaman vectores o arreglos unidimensionales.El siguiente post es para explicar las operaciones mas comunes que se ocupan con esta estructura.


Operaciones con vectores
Asignacion
Lectura / Escritura
Recorrido
Actualizar(añadir,borrar,insertar)
Ordenacion
Busqueda



Asignacion:
La asignacion de valores a un elemento del vector se realizara con la instruccion de asignacion.
Lectura / Escritura De Datos

Acceso Secuencial Al Vector(Recorrido)
Se puede acceder a los elementos de un vector para introducir datos(escribir) en el o bien para
visualizar su contenido(leer).A la operacion de efectuar una accion general sobre todos los 
elementos de un vector se la denomina recorrido del vector.Estas operaciones se realizan 
utilizando estructuras repetitivas o bucles.


Actualizacion De Un Vector.
La operacion de actualizar un vector puede constar a su vez de tres operaciones elementales.
Añadir elementos
buscar Elementos
Borrar Elementos

Se denomina añadir datos a un vector la operacion de añadir un nuevo elemento al final del  vector.La unica condicion necesaria para esta operacion consistira en la comprobacion del espacio de memoria suficiente para el nuevo vector,dicho de otro modo, que el vector no contenga todos los elementos con que fue definido al principio del programa.

Añadir elementos

                                                     Añadir elementos De Forma Secuencial

                                                            Buscar Borrar Actualizar  Elementos
Falta Ordenacion Busquedas mas avanzadas espero que sea de ayuda y saque de muchas dudas. Comenten no sean Bayuncos....