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

No hay comentarios:

Publicar un comentario