Espinosa Talavera Aldo

COMO HACER UN ARRAY LIST

Para hacer un arraylist, se hace uso de los llamados Generics, que para este caso, no es más que hacerle saber a la colección el tipo de dato que almacenará, esto por medio de poner el nombre de la clase dentro de signos <>.

Para crear lo que necesitas, debes crear tu arrayList así:

ArrayList<ArrayList>array = new ArrayList();

Lo que estás haciendo es crear un ArrayList que almacena tipos de dato ArrayList únicamente. Para agregar ya necesitas hacer el manejo conocido:

array.add(new ArrayList());

Obviamente, en el primer ArrayList no podrás introducir objetos de otro tipo, sin embargo en los ArrayList de adentro puedes hacer lo que necesites, por ejemplo, si necesitas un ArrayList de ArrayList de String, sería:

ArrayList<ArrayList<String>> arreglo = new ArrayList();

El único valor que podrías introducir sería específicamente ArrayList de cadenas.

EJEMPLO DE ARRAYLIST

Programa que pide el nombre del alumno y tres calificaciones para luego calcular su promedio. Se puede agregar cualquier cantidad de elementos a la lista.

public class NodoLista4{

String nom;

int calif1;

int calif2;

int calif3;

}

import java.util.*;

public class ListaAlumnos{

static double prom;

public static void main( String args[] ){

Scanner leer = new Scanner(System.in);

NodoLista4 nodo = new NodoLista4();

int op;

ArrayList lista = new ArrayList();

do{

System.out.println( "Ingrese el nombre del alumno:" );

nodo.nom = leer.next();

System.out.println( "Ingrese la primera calificación:" );

nodo.calif1 = leer.nextInt();

System.out.println( "Ingrese la segunda calificación:" );

nodo.calif2 = leer.nextInt();

System.out.println( "Ingrese la tercera calificación:" );

nodo.calif3 = leer.nextInt();

lista.add("Nombre del alumno:\n"+nodo.nom);

lista.add("Calificación 1:\n"+nodo.calif1);

lista.add("Calificación 2:\n"+nodo.calif2);

lista.add("Calificación 3\n"+nodo.calif3);

promedio(nodo.calif1, nodo.calif2, nodo.calif3);

lista.add("Su promedio es:\n"+prom);

System.out.println( "¿Desea ingresar otro alumno?" );

System.out.println( "1.-Si\t 2.-No" );

op = leer.nextInt();

}

while(op != 2);

List lista2 = new ArrayList(lista);

Iterator it = lista2.iterator();

while (it.hasNext()){

System.out.println(it.next()+"");

}

}

private static double promedio(int calif1, int calif2, int calif3){

int suma = calif1 + calif2 + calif3;

prom = suma/3;

return prom;

}

}

La clase ArrayList permite el almacenamiento de datos en memoria de forma similar a los arrays convencionales, pero con la gran ventaja de que el número de elementos que puede almacenar es dinámico. La cantidad de elementos que puede almacenar un array convencional está limitado por el número que se indica en el momento de crearlo o inicializarlo. Los ArrayList, en cambio, pueden almacenar un número variable de elementos sin estar limitados por un número prefijado.

DECLARACION DE UN OBJETO ARRAY LIST

La declaración genérica de un ArrayList se puede hacer con un formato similar al siguiente:

ArrayList nombreDeLista;

Como se puede observar, de esta manera no se indica el tipo de datos que va a contener. Suele ser recomendable especificar el tipo de datos que va a contener la lista para que así se empleen las operaciones y métodos adecuados para el tipo de datos manejado. Para especificar el tipo de datos que va a contener la lista se debe indicar entre los caracteres '<' y '>' la clase de los objetos que se almacenarán:

ArrayList<nombreClase> nombreDeLista;

En caso de almacenar datos de un tipo básico de Java como char, int, double, etc, se debe especificar el nombre de la clase asociada: Character, Integer, Double, etc.

Ejemplos:

1.ArrayList<String> listaPaises;

2.ArrayList<Integer> edades

CREACION DE UN ARRAYLIST

Para crear un ArrayList se puede seguir el siguiente formato:

nombreDeLista = new ArrayList();

Como suele ser habitual, se puede declarar la lista a la vez que se crea:

ArrayList<nombreClase> nombreDeLista = new ArrayList();

Por ejemplo:

1.ArrayList<String> listaPaises = new ArrayList();

La clase ArrayList forma parte del paquete java.util, por lo que hay que incluir en la parte inicial del código la importación de ese paquete (import java.util.ArrayList;). Como siempre, desde NetBeans se puede solucionar rápidamente desde el menú contextual (clic derecho del ratón) del código fuente, escogiendo la opción "Reparar importaciones"

AÑADIR ELEMENTOS AL FINAL DE LA LISTA

El método add de la clase ArrayList posibilita añadir elementos. Los elementos que se van añadiendo, se colocan después del último elemento que hubiera en el ArrayList. En primer elemento que se añada se colocará en la posición 0.

boolean add(Object elementoAInsertar);

Ejemplos:

1.ArrayList<String> listaPaises = new ArrayList();

2.listaPaises.add("España"); //Ocupa la posición 0

3.listaPaises.add("Francia"); //Ocupa la posición 1

4.listaPaises.add("Portugal"); //Ocupa la posición 2

1.//Se pueden crear ArrayList para guardar datos numéricos de igual manera

2.ArrayList<Integer> edades = new ArrayList();

3.edades.add(22);

4.edades.add(31);

5.edades.add(18);

INSERTAR ELEMENTOS EN UNA DETERMINADA POSICION

Con los arrayList también es posible insertar un elemento en una determinada posición desplazando el elemento que se encontraba en esa posición, y todos los siguientes, una posición más.

Para ello, se emplea también el método add indicando como primer parámetro el número de la posición donde se desea colocar el nuevo elemento:

void add(int posición, Object elementoAInsertar);

Ejemplo:

1.ArrayList<String> listaPaises = new ArrayList();

2.listaPaises.add("España");

3.listaPaises.add("Francia");

4.listaPaises.add("Portugal");

5.//El orden hasta ahora es: España, Francia, Portugal

6.listaPaises.add(1, "Italia");

7.//El orden ahora es: España, Italia, Francia, Portugal

Si se intenta insertar en una posición que no existe, se produce una excepción (IndexOutOfBoundsException)

SUPRIMIR ELEMENTOSM DE LA LISTA

Si se quiere que un determinado elemento se elimine de la lista se puede emplear el método remove al que se le puede indicar por parámetro un valor int con la posición a suprimir, o bien, se puede especificar directamente el elemento a eliminar si es encontrado en la lista.

Object remove(int posición)

boolean remove(Object elementoASuprimir)

Se puede ver en el siguiente ejemplo los dos posibles usos:

01.ArrayList<String> listaPaises = new ArrayList();

02.listaPaises.add("España");

03.listaPaises.add("Francia");

04.listaPaises.add("Portugal");

05.//El orden hasta ahora es: España, Francia, Portugal

06.listaPaises.add(1, "Italia");

07.//El orden ahora es: España, Italia, Francia, Portugal

08.listaPaises.remove(2);

09.//Eliminada Francia, queda: España, Italia, Portugal

10.listaPaises.remove("Portugal");

11.//Eliminada Portugal, queda: España, Italia

CONSULTA DE UN DETERMINADO ELEMENTO DE LA LISTA

El método get permite obtener el elemento almacenado en una determinada posición que es indicada con un parámetro de tipo int:

Object get(int posición)

Con el elemento obtenido se podrá realizar cualquiera de las operaciones posibles según el tipo de dato del elemento (asignar el elemento a una variable, incluirlo en una expresión, mostrarlo por pantalla, etc). Por ejemplo:

1.System.out.println(listaPaises.get(3));

2.//Siguiendo el ejemplo anterior, mostraría: Portugal

MODIFICAR UN ELEMENTO CONTENIDO EN LA LISTA

Es posible modificar un elemento que previamente ha sido almacenando en la lista utilizando el método set. Como primer parámetro se indica, con un valor int, la posición que ocupa el elemento a modificar, y en el segundo parámetro se especifica el nuevo elemento que ocupará dicha posición sustituyendo al elemento anterior.

Object set(int posición, Object nuevoElemento)

Por ejemplo, si en el ejemplo de la lista de países se desea modificar el que ocupe la posición 1 (segundo en la lista) por "Alemania":

1.listaPaises.set(1, "Alemania");

BUSCAR UN ELEMENTO

La clase ArrayList facilita mucho las búsquedas de elementos gracias al método indexOf que retorna, con un valor int, la posición que ocupa el elemento que se indique por parámetro.

int indexOf(Object elementoBuscado)

Si el elemento se encontrara en más de una posición, este método retorna la posición del primero que se encuentre. El método lastIndexOf obtiene la posición del último encontrado.

Ejemplo que comprueba si Francia está en la lista, y muestra su posición.

1.String paisBuscado = "Francia";

2.int pos = listaPaises.indexOf(paisBuscado);

3.if(pos!=-1)

4. System.out.println(paisBuscado + " se ha encontrado en la posición: "+pos);

5.else

6. System.out.println(paisBuscado + " no se ha encontrado");

En caso de que no se encuentre en la lista el elemento buscado, se obtiene el valor -1.

RECORRER EL CONTENIDO DE LA LISTA

Es posible obtener cada uno de los elementos de la lista utilizando un bucle con tantas iteraciones como elementos contenga, de forma similar a la empleada con los arrays convencionales. Para obtener el número de elementos de forma automática se puede emplear el método size() que devuelve un valor int con el número de elementos que contiene la lista.

1.for(int i=0; i<listaPaises.size(); i++)

2. System.out.println(listaPaises.get(i));

También se puede emplear el otro formato del bucle for en el que se va asignando cada elemento de la lista a una variable declarada del mismo tipo que los elementos del ArrayList:

1.for(String pais:listaPaises)

2. System.out.println(pais);

(Como implementación de la clase Collection

OTROS METODOS DE INTERES

· void clear(): Borra todo el contenido de la lista.

· Object clone(): Retorna una copia de la lista.

· boolean contains(Object elemento): Retorna true si se encuenta el elemento indicado en la lista, y false en caso contrario.

· boolean isEmpty(): Retorna true si la lista está vacía.

· Object[] toArray(): Convierte la lista a un array.

OTRO EJEMPLO DE ARRAY LIST PARA DESPLEGAR LA LISTA

package ListaAlumnos;

import java.awt.*;

import javax.swing.JApplet;

import javax.swing.JButton;

import javax.swing.JTextField;

public class ListaAlumnos extends JApplet{

//declaracion de variables

Panel cards;

String botonPanel = "Pulsar Botones";

String textPanel = "Ingresar Datos";

JButton boton1, boton2;

JTextField campoTexto1, campoTexto2, campoTexto3, campodeTexto4, campodeTexto5, campodeTexto6;

public void init(){

setLayout(new BorderLayout());

setFont(new Font("Helvetica", Font.PLAIN, 14));

//Crea los botones y TextField

JButton boton1 = new JButton("Boton1");

JButton boton2 = new JButton("Boton2");

JTextField campoTexto1 = new JTextField("Ingrese Nombre del alumno", 20);

JTextField campoTexto2 = new JTextField("Ingrese Nombre del alumno", 20);

JTextField campoTexto3 = new JTextField("Ingrese Nombre del alumno", 20);

JTextField campoTexto4 = new JTextField("Ingrese Nombre del alumno", 20);

JTextField campoTexto5 = new JTextField("Ingrese Nombre del alumno", 20);

JTextField campoTexto6 = new JTextField("Ingrese Nombre del alumno", 20);

//Asignacion de colores a boton y a TextField

boton1.setBackground(Color.white);

boton2.setBackground(Color.green);

campoTexto1.setBackground(Color.red);

campoTexto2.setBackground(Color.blue);

campoTexto3.setBackground(Color.white);

campoTexto4.setBackground(Color.black);

campoTexto5.setBackground(Color.green);

campoTexto6.setBackground(Color.orange);

Panel panel = new Panel();

Choice escoger = new Choice();

escoger.addItem(botonPanel);

escoger.addItem(textPanel);

//Agrega color a Choice

escoger.setBackground(Color.yellow);

//agrega la lista al panel

panel.add(escoger);

add("North", panel);

cards = new Panel();

cards.setLayout(new CardLayout());

//Panel donde se pegan los botones

Panel panel1 = new Panel();

panel1.add(boton1);

panel1.add(boton2);

//Panel donde se pega el TextField

Panel panel2 = new Panel();

panel2.add(campoTexto1);

panel2.add(campoTexto2);

panel2.add(campoTexto3);

panel2.add(campoTexto4);

panel2.add(campoTexto5);

panel2.add(campoTexto6);

cards.add(botonPanel, panel1);

cards.add(textPanel, panel2);

add("Center", cards);

}

public boolean action(Event evt,Object arg) {

if(evt.target instanceof Choice) {

((CardLayout)cards.getLayout()).show(cards, (String)arg);

return true;

}

return false;

}

}

y obtenemos un applet asi:

luego damos clic en la flecha y nos despliega este menu: