10 -Arreglos de Objetos - ArrayList Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas Arreglos de Objetos Un arreglo es una colección de objetos numerados del mismo tipo, en donde cada variable o celda en el arreglo tiene un índice. Las celdas están numeradas del 0 al N-1, donde N es el número de celdas del arreglo es decir su capacidad. Los índices de un arreglo en Java deben estar dentro de los límites, 0 – N1, de lo contrario se generará un error durante la ejecución. Java implementa los arreglos como objetos que pueden ser tratados como cualquier otro objeto. Para utilizar un arreglo en Java: 1. Declare una variable para que contenga el arreglo 2. Cree un nuevo arreglo de objeto y asígnelo a la variable de arreglo 3. Almacene información en ese arreglo 4. Realice operaciones de almacenamiento y recuperación con los elementos del arreglo Declaración: Se agrega un par de corchetes vacíos [ ] al objeto o tipo de datos, o al nombre de variable. Ejemplos: String palabrasDificiles [ ]; Point hits [ ]; int donaciones [ ]; O bien: String [ ] palabrasDificiles; Point [ ] hits; int [ ] donaciones; Creación de objetos de arreglos: Después de haber declarado la variable arreglo, el siguiente paso es crear un arreglo de objetos y asignarlo a esa variable. Las formas de hacerlo son: • a través del operador new • inicializando directamente el contenido del arreglo String [ ] nombreJugadores = new String [10]; int [ ] temps = new int [99]; Todas las posiciones se inicializan automáticamente (0 para arreglos numéricos, false para booleanos, ‘\0’ para arreglos de carácter y null para objetos) También se puede crear e inicializar un arreglo al mismo tiempo. Encierre los elementos del arreglo entre llaves, separándolos con comas: String [ ] chiles = { “jalapeno”, “de árbol”, “serrano”, “habanero”}; Al crear elementos con valores iniciales, el arreglo es del mismo tamaño que la cantidad de elementos que ha incluido en las llaves. Ejemplo: class ArregloNombres { String[] nombres = { "Pedro", "Jorge", "Carlos", "Luis"}; String[] apellidos = new String[nombres.length]; void imprime() { int i = 0; System.out.println(nombres[i] + " " + apellidos[i]); i++; System.out.println(nombres[i] + " " + apellidos[i]); i++; System.out.println(nombres[i] + " " + apellidos[i]); i++; System.out.println(nombres[i] + " " + apellidos[i]); } public static void main (String arguments[]) { ArregloNombres a = new ArregloNombres(); a.imprime(); System.out.println("-----"); a.apellidos[0] = "Perez"; a.apellidos[1] = "Isaac"; a.apellidos[2] = "Valderrama"; a.apellidos[3] = "Garzon"; a.imprime(); } } El tamaño de un arreglo se almacena en la variable length, que puede ser accesada a través del operador punto (.) y el nombre del arreglo: nombreArreglo.length El manejo de arreglos multidimencionales funciona de la misma forma que en C++. Nota: Recuerde que en los arreglos se puede almacenar cualquier tipo de objeto siempre y cuando este sea del mismo tipo. La clase ArrayList Explicada: Las aplicaciones frecuentemente necesitan almacenar un grupo de datos en un sólo objeto. Los arrays sirven bien para este propósito, pero algunas veces necesitamos incrementar o reducir dinámicamente el número de elementos del array, o hacer que contenga distintos tipos de datos. Esto es común entre las aplicaciones como las tiendas online. Un cliente añade una mercancía a su carro de la compra, y detrás de la escena, los ítems son almacenados y eliminados automáticamente. Para esta clase de grupos de datos crecientes y menguantes, podemos usar la clase Vector, o la reciente clase ArrayList del paquete java.util. Un ArrayList contiene tantos objetos como necesitemos. ArrayList tiene varios constructores, dependiendo de cómo necesitemos construir el ArrayList. Los siguientes dos constructores nos ayudarán a empezar: • ArrayList() construye un ArrayList con capacidad cero por defecto, pero crecerá según le vayamos añadiendo: ArrayList al = new ArrayList(); • ArrayList(int initialCapacity) construye un ArrayList vacío con una capacidad inicial especificada: ArrayList al2 = new ArrayList(5); Un objeto ArrayList sólo contiene referencias a objetos. Para almacenar tipos primitivos como double, long, o float, usamos una clase envoltura, como se muestra abajo. Para añadir objetos al ArrayList, llamamos a sus métodos con el operador punto: al.add("Java es un Lenguaje de POO"); //adiciona un String al.add(new Double(40.00)); //Adiciona un double en una clase //envoltura Double como Object System.out.println(al.size()); //imprime el tamano del ArryList Si necesitamos circular a través de los elementos del ArrayList, usamos la clase Iterator y sus métodos hasNext y next: Iterator alIt = al.iterator(); while (alIt.hasNext()) { System.out.println(alIt.next() + " "); } ArrayList es una de las muchas clases del Collection Framework, que proporciona un conjunto de interfaces y clases bien-diseñados para almacenar y manipular grupos de datos como una sola unidad, una coleccion. Programa Ejercicio Hemos aprendido sóbre las clases, los objetos y los constructores, y sobre la clase ArrayList. Pon estos conceptos juntos para crear la siguiente aplicación: • Crea una clase llamada ItemsListing. • Crea un constructor para ItemsListing que tome un parámetro: item. • En la clase ItemsListing, usa el siguiente método para convertir un dato variable en un String: public String toString() { String s = "Item: " + item; return s; } • Crea una clase pública llamada ArrayListItems que contenga el método main. • En el método main, ejemplariza tres objetos de ItemsListing, proporcionando los datos para el constructor. • Crea un ArrayList. • Rellena el ArrayList con los tres objetos, usando el método add. • Pasa el ArrayList a un Iterator. • Usa un bucle while y el método hasNext para imprimir el contenido del ArrayList. • Graba el fichero como ArrayListItems.java compilalo y ejecutalo. El resultado debería ser similar a este: Item: Balon Item: De Item: Futbol Un poco de Java ¿Por qué los Argumentos de la Línea de Comandos no son Tecnología 100% Pura Java? Las aplicaciones que requieren argumentos de la línea de comandos no son 100% Puro Java porque no todos los sistemas tienen disponible una línea de comandos. Si tienes una línea de comandos en tu sistema, usar argumentos de línea de comandos durante el desarrollo de la aplicación es útil para probar la lógica del código, o leer ficheros. De otra forma, debes considerar el utilizar propiedades para que tu aplicación sea portable. Solución al Programa de Ejercicio Esta es una posible solución al Programa del Ejercicio: //ArrayList //java.util package import java.util.*; class ItemsListing { private String item; public ItemsListing (String item) { this.item = item; } public String toString() { String s = "Item: " + item; return s; } } public class ArrayListItems { public static void main(String []args) { ArrayList items = new ArrayList(); items.add(new ItemsListing("Balon")); items.add(new ItemsListing("De")); items.add(new ItemsListing("Futbol")); Iterator iterateItems = items.iterator(); while (iterateItems.hasNext()) { System.out.println(iterateItems.next()); } } } Resultados: Balon De Futbol