Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre una alternativa mas practica y eficiente para manejar arrays en Java.

Anuncios

En este post vimos como trabajar con Arrays en Java, para que son y como nos pueden ayudar, especialmente cuando trabajamos con las balas en nuestro proyecto anterior pero hasta ahora vimos que los arrays deben tener un tamaño de elementos definidos y en nuestro proyecto anterior definimos un numero increiblemente ridiculo para poder trabajar tranquilo pero en realidad eso es poco practico porque si bien no logremos alcanzar ese valor vamos a tener dos inconvenientes latentes:

  • El alcanzar ese valor y que nos devuelva un error (aunque lo solucionamos)
  • Ocupar demasiado espacio innecesario en el monton (heap) de la memoria
Anuncios
Anuncios

Para evitar esto existe el tipo de Array del titulo, ya que este al igual que ocurre en Javascript (o Vector) no necesita que se le defina un tamaño sino que se va a adaptando a medida que agregamos elementos al mismo es decir que es mas de tipo dinamico, lo bueno es que tiene un tamaño predeterminado, si quitamos elementos no se reduce y esos espacios quedan reservados para futuros datos, si agregamos de mas se vuelve a incrementar y esta clase a su vez nos ofrece la posibilidad de limpiar todo o reemplazar algun dato, veamos algunos de sus metodos:

  • add([posicion],valor), con este podemos agregar nuevos valores, la posicion es opcional si la informamos agregare el valor en la posicion indicada pero no lo reemplaza y mueve el resto, sino informamos lo agrega en la ultima posicion
  • get(posicion), obtiene el valor en la posicion informada
  • set(posicion,valor), reemplaza el valor en la posicion informada
  • remove(posicion), quita el valor de la posicion informada
  • clear(), remueve todos los valores del objeto
  • size(), nos devuelve el tamaño de nuestro objeto
Anuncios

Al igual que sucede con los arrays estos solo pueden tener un tipo de valor, es decir si lo definimos como string solo datos de tipo string, si es tipo int lo mismo, ya que mencionamos este tema veamos como es su sintaxis:

ArrayList<tipodato> nombreArray = new ArrayList<tipodato>();
Anuncios

Como pueden observar se inicializa de la misma forma que los objetos vistos hasta ahora, veamos un ejemplo de definicion de este objeto:

ArrayList<String> miLista = new ArrayList<String>();
Anuncios

Observen como respetamos el mismo tipo de dato (String) para generar nuestro objeto, para entender mejor el concepto vamos a crear el siguiente proyecto:

  • Dispositivos: Phone and Tablet
  • Actividad: No Activity
  • Nombre: Lista de Arreglos
  • Nombre de paquete: org.example.listadearreglos
  • API Minimo: API 14 (Android 4.0)
Anuncios

Una vez generado vamos a necesitar agregar nuestro modulo de Java para ello van a File -> New -> New Module, nos aparecera un nuevo cuadro y en este deben seleccionar Java or KotLin library, nos aparecera un nuevo cuadro donde completaremos los campos de esta forma:

  • Package Name: listadearreglos
  • Class Name: Listas
  • Language: Java (Este es un menu que aparece debajo)
Anuncios

Nos debera quedar de la siguiente manera

Anuncios

Con nuestro nuevo modulo creado nos va a quedar de la siguiente forma

Anuncios

Nuestro siguiente paso sera agregar el siguiente codigo dentro de la clase recien creada:

Listas.java

package org.example.listadearreglos;

import java.util.ArrayList;

public class Listas {

    public static void main(String args[]){
        ArrayList<String> miLista = new ArrayList<String>();

        miLista.add("Martin Miranda");
        miLista.add("Enzo Tortore");
        miLista.add("DarkZero Aleman");
        miLista.add("Ariel Polizzi");
        System.out.println("Mostramos nuestra lista Actual:");
        for(String i : miLista){
            System.out.println(i);
        }
        miLista.add(2,"Marta Gargaglione");
        System.out.println("Mostramos nuestra nueva lista:");
        for(String i : miLista){
            System.out.println(i);
        }
        miLista.set(4,"Juan Militello");
        System.out.println("Mostramos nuestra lista con una modificacion:");
        for(String i : miLista){
            System.out.println(i);
        }
        System.out.println("El tamaño de nuestra lista es: "
                + miLista.size());
        miLista.clear();
        System.out.println("El tamaño de nuestra lista es: "
                + miLista.size());
    }
}
Anuncios

Este codigo es simple pero pronto hablaremos sobre el, ahora si intentamos correr nuestro codigo nos devolvera un error porque no definimos ninguna actividad como predeterminada, para ello debemos ir al boton app con una cruz roja

Anuncios
Anuncios

Una vez presionada apareceran dos opciones una llamada Edit Configurations y otra llamada app, eligen la primera y aparecera un nuevo cuadro, en este deben apretar el boton con el signo de mas (+) y seleccionar Application como se ve en la siguiente imagen

Anuncios

En el nuevo cuadro deberan completar los siguientes campos de la siguiente forma:

  • Name: Listas
  • Main Class: org.example.listadearreglos.Listas
  • Use classpath of module: listadearreglos
Anuncios

Con estos tres datos configurados deberia funcionar perfectamente ahora nuestra aplicacion, presionen Ok para cerrar el cuadro y comencemos a hablar sobre nuestro codigo y sus respectivas salidas.

Anuncios
Anuncios

Este es un codigo bien simple, en este caso como va a ser un codigo completamente de Java necesitamos crear si o si el metodo main, si no conocen de Java puro la funcion o metodo main es el corazon del codigo y no nos puede faltar, por otro lado siempre es publico (public) y estatico (static) porque debe poder ser accedido desde cualquier parte, en este caso usamos un void (y en general siempre se usa) pero una buena practica es utilizar el tipo int y al final del codigo agregar return 0 para indicar que funciono correctamente, esta es una practica de C++ pero no estaria de mas usarla aca tambien, esta funcion es de tipo static de manera predeterminada porque Java lo trabaja de esta forma, esto implica que otras funciones y/o variables deberiamos definirlas como static para ser accedidas entre si pero para mayor comodidad vamos a hacer todo dentro de este metodo, con esto explicado pasemos al bloque en si.

Lo primero que haremos sera crear nuestro objeto de tipo ArrayList llamado miLista, luego agregaremos cuatro nombres por medio de la funcion add, lo siguiente sera mostrar en “pantalla”, luego mostrare porque, todos los valores de nuestra lista y para ello usamos un for generico o for avanzado donde nos devolvera todos los elementos almacenados en el objeto, vamos a mostrar esta parte de la salida:

Mostramos nuestra lista Actual:
Martin Miranda
Enzo Tortore
DarkZero Aleman
Ariel Polizzi
Anuncios

En este caso vemos que agrego cada uno de los elementos en el orden que lo fuimos ingresando, tenemos esta siguiente linea:

miLista.add(2,"Marta Gargaglione");
Anuncios

En este caso volvemos a usar al metodo add pero esta vez le asignamos una posicion para agregarlo, si cuentan se van a dar cuenta de que existe mas valores que eso pero como dijimos antes en lugar de reemplazar lo agregara entre dos posiciones, despues mostramos un mensaje para indicar el cambio y despues por medio de otro for generico mostraremos nuevamente los datos nuevos, veamos su salida:

Mostramos nuestra nueva lista:
Martin Miranda
Enzo Tortore
Marta Gargaglione
DarkZero Aleman
Ariel Polizzi
Anuncios

Aca podemos observar como se agrego el nuevo nombre y empujo a los restantes a sus respectivas siguientes posiciones, la siguiente modificacion es mas entretenida porque usaremos esta linea:

miLista.set(4,"Juan Militello");
Anuncios

En este caso usamos a set y le decimos que reemplace la posicion cuatro que en realidad es la cinco porque recuerden que siempre empezamos a contar desde cero, y le decimos que reemplace el nombre en esa posicion, volvemos a mostrar un mensaje de notificacion de la modificacion y nuevamente por medio de un bucle for generico mostramos todos los nombres, veamos como es su salida:

Mostramos nuestra lista con una modificacion:
Martin Miranda
Enzo Tortore
Marta Gargaglione
DarkZero Aleman
Juan Militello
Anuncios

Aca podemos observar como nos modifico la ultima posicion, es decir la quinta, y asi como reemplazamos cualquiera de las otras, nuestra siguiente linea se encarga de mostrarnos el total de elementos en nuestra lista, despues la limpiamos por medio de clear y por ultimo volvemos a mostrar el total, su salida es la siguiente:

El tamaño de nuestra lista es: 5
El tamaño de nuestra lista es: 0
Anuncios

Observen como nos trajo el total de los elementos antes y despues del clear, con esto cubrimos todo el codigo y su respectiva salida, como dije al principio esto no nos aparecera en pantalla sino mas bien en una de las ventanas de nuestro IDE, para ello deben buscar la opcion 4: Run y presionarla y ahi podran ver la salida de nuestro codigo Java, les dejo una imagen para que puedan verlo

Anuncios

La opcion resaltada es la que deben tocar y a la derecha en un panel podemos ver nuestra salida completita, completita, con esto tenemos una opcion mas que interesante a los arrays tradicionales e inclusive con metodos para poder trabajarlos de mejor forma.

Anuncios

Un ultimo tema que debemos tocar sobre los ArrayLists y los Arrays es que son polimorficos, es decir que pueden compartir multiples tipos de clases siempre y cuando sean parientes entre si, esto nos beneficia que uno de estos tipos de objetos siempre va a poder usar clases que sean hijas de la super clase, para entender mejor el concepto vamos a suponer el siguiente ejemplo.

Anuncios

En este ejemplo vamos a tener una super clase llamada Animal, de las cuales tendremos un par de clases herederas llamadas Perro y Gato, estas dos clases tendran sus propias variables y metodos pero a su vez tambien poseen las de Animal, para entender mejor el concepto de herencia les recomiendo este post, con estas tres clases establecidas vamos a crear los siguientes objetos:

Animal miAnimal = new Animal();
Perro perro = new Perro();
Gato gato = new Gato();
Anuncios

Con los tres objetos creados vamos a crear un nuevo array y al cual le agregaremos los elementos:

Animal [] animales = new Animal[10];
animales[0] = miAnimal;
animales[1] = perro;
animales[2] = gato;
Anuncios
Anuncios

En esta ocasion creamos un array de tipo Animal llamado animales y le asignamos un tamaño de diez elementos, el primer elemento que agregamos es uno que espera por ser del mismo tipo, el segundo tambien estara permitido porque al ser heredera del primero se considera que son del mismo tipo o familia, lo mismo con el siguiente, es decir que nosotros podemos crear un array de la clase super o padre y los hijos/herederos de esta podran ser usados en el array, si creamos otro objeto que sea heredero de la clase Animal podemos usarlo tambien siempre y cuando no nos pasemos de la cantidad establecida, ahora vamos a suponer la situacion de que necesitamos crear un nuevo perro pero desde nuestro array y para ello usaremos la siguiente sintaxis:

Perro nuevoPerro = (Perro) animales[1];
Anuncios

En esta ocasion la sintaxis es valida pero deben recordar que se debe indicar el tipo de dato, a esto se llama castear, que estamos recuperando desde el array de lo contrario nos dara un error porque sino lo indicamos el tipo al ser Animal no coincidira por mas que sean parientes, esto que vimos aplica tambien a los ArrayLists, la unica diferencia radica al momento de crear este objeto, sera de la siguiente forma:

ArrayList<Animal> animales = new ArrayList<Animal>();
Anuncios

Y vamos a tener un par de mejoras con respecto a lo anterior, como dijimos anteriormente son mas dinamicos y no vamos a tener ningun limite, tambien tendremos los metodos a disposicion con sus pros y contras, esto nos sera muy util cuando veamos el quinto proyecto.

Anuncios

En resumen, hoy hemos visto una version mejorada de los arrays, hemos visto como es su sintaxis, algunas de las ventajas que posee con respecto al estandar, hemos visto los metodos disponibles, como aplicarlos en un ejemplo, como nos podrian haber ayudado con respecto al proyecto anterior, cual es su ventaja con el tema de ser polimorfico, y este nos servira para el proximo proyecto pero por ahora nada de spoilers, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.