Módulo 7: Tópicos Avanzados en Java

    2. Colecciones

Una colección es una clase en Java que nos permite agrupar diferentes elementos en una misma unidad. Es muy comun utilizarla cuando queremos guardar diferentes elementos, como si usaramos un arreglo.

La gran ventaja de una colección es que no nos preocupamos por el tamaño de elementos que tendrá, es decir vamos añadiéndole elementos conforme lo necesitemos y no es necesario decir cuantos vamos a tener en total.

La clase que nos ayuda a esto es la clase Vector, esta clase tiene diferentes métodos que nos pueden ayudar a crear el vector (como comúnmente se le llama al objeto de la clase), esta clase la utilizamos de la biblioteca java.util, como lo muestra el siguiente ejemplo:

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.util.Vector;

// <applet width="400" height="200" code="AppletArreglos2"></applet>

public class AppletArreglos2 extends Applet implements ActionListener{
    	Label l1, l2;
	    Button b1, b2,b3,b4;	
	    TextField t1;
	    TextArea ta1;
	    Vector arreglo;

        public AppletArreglos2() {
			l1 = new Label("Dato a Añadir");
			l2 = new Label("Texto para ver Arreglo");
			t1 = new TextField();
			ta1 = new TextArea(10,12);
			b1 = new Button("Añade");
			b2 = new Button("Muestra Vector");
			b3 = new Button("Limpia Vector");
			b4 = new Button("Limpia Campos");
			add(l1);
			add(t1);
			add(l2);
			add(ta1);
			add(b1);
			add(b2);
			add(b3);
			add(b4);
			b1.addActionListener(this);
			b2.addActionListener(this);
			b3.addActionListener(this);
			b4.addActionListener(this);
			arreglo = new Vector();
 	    }
	     
	    public void actionPerformed(ActionEvent ae) {
	        if (ae.getSource() == b1) {
	                arreglo.add(new Integer(t1.getText()));
	                t1.setText("");   
	         }
	         if (ae.getSource() == b2) {
	               ta1.setText(arreglo.toString());
	         }
	         if (ae.getSource() == b3) {
	               arreglo = new Vector();
	         }
	         if (ae.getSource() == b4) {
					t1.setText("");
					ta1.setText("");
	         }
	    }
}

Este ejemplo es una nueva versión de la tomada de la sección de arreglos, es importante que los compares, al ser ejecutado nos mostrará lo siguiente (usado varias veces):

  

(Añadimos primero el 5 y luego el 8, y luego mostramos el vector)

Aqui podemos observar que los valores se han ido añadiendo al vector utilizando el método add :

arreglo.add(new Integer(t1.getText()));

Es importante aqui hacer notar que a diferencia del ejemplo que usamos en el tema de arreglos, aqui estamos añadiendo un objeto de la clase Integer (una clase de envoltura), porque la clase Vector solo acepta objetos a añadir y no valores primitivos.

Para mostrar lo que tiene el vector hemos pasado todo el vector al área de texto utilizando el método toString()

               ta1.setText(arreglo.toString());

Y es entonces que observamos como el método toString() en la clase Vector, nos va dando los valores del objeto vector, separando por comas y todos ellos entre corchetes.

Si quisieramos dejar estos valores por línea, debemos recurrir primero al uso del método size() que es el que nos dice el número de elementos en el vector (el cual se ajusta automáticamente al añadir o borrar elementos), y utilizamos el metodo get(), para ir obteniendo cada elemento del vector, donde al igual que en un arreglo empezamos con el elemento cero (0) y terminamos con el n-esimo menos 1 (n-1), es decir si son 5 elementos vamos del cero al 4, veamos como quedaría el applet:

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.util.Vector;

// <applet width="400" height="200" code="AppletArreglos3"></applet>

public class AppletArreglos3 extends Applet implements ActionListener{
    	Label l1, l2;
	    Button b1, b2,b3,b4;	
	    TextField t1;
	    TextArea ta1;
	    Vector arreglo;

        public AppletArreglos3() {
			l1 = new Label("Dato a Añadir");
			l2 = new Label("Texto para ver Arreglo");
			t1 = new TextField();
			ta1 = new TextArea(10,12);
			b1 = new Button("Añade");
			b2 = new Button("Muestra Vector");
			b3 = new Button("Limpia Vector");
			b4 = new Button("Limpia Campos");
			add(l1);
			add(t1);
			add(l2);
			add(ta1);
			add(b1);
			add(b2);
			add(b3);
			add(b4);
			b1.addActionListener(this);
			b2.addActionListener(this);
			b3.addActionListener(this);
			b4.addActionListener(this);
			arreglo = new Vector();
 	    }
	     
	    public void actionPerformed(ActionEvent ae) {
	        if (ae.getSource() == b1) {
	                arreglo.add(new Integer(t1.getText()));
	                t1.setText("");   
	         }
	         if (ae.getSource() == b2) {
	               ta1.setText("");
	               for (int i=0; i < arreglo.size(); i++) {
	                  ta1.append("" + arreglo.get(i) + "\n");
	               }
	         }
	         if (ae.getSource() == b3) {
	               arreglo.removeAllElements();
	         }
	         if (ae.getSource() == b4) {
					t1.setText("");
					ta1.setText("");
	         }
	    }
}

Ejecutado quedaria:

  

(Añadimos primero el 5 y luego el 8, y luego mostramos el vector)

Entonces observamos como el vector nos ayuda más que un arreglo, pues no tenemos que estar previniendo el número de elementos a tener máximo, y solo utilizamos el método size() para ver cuantos habrá, como el segmento de código:

               ta1.setText("");
               for (int i=0; i < arreglo.size(); i++) {
                  ta1.append("" + arreglo.get(i) + "\n");
               }

El cual utilizando el arreglo.size() sabrá hasta donde va a llegar  (n-1) ya que es menor al tamaño, y utilizando el método get() y el subíndice i, toma el objeto a desplegar.

Para borrar el vector, estamos haciendo uso del método removeAllElements() el cual es parte de la clase Vector y nos sirve para borrar todos los elementos del vector, esto automáticamente nos daria un size() en cero, pues ya no hay elementos.

Es importante aqui hacer notar que si existiera alguna forma especial de transformar a String el objeto (es decir un método toString() definido para el) utilizariamos arreglo.get(i).toString()    ya que   arreglo.get(i)   sería un objeto, en este caso el toString() de la clase Integer solo transforma a String el número entero.

Ejercicio
1. Toma el applet del último ejercicio, añade el botón Borrar, corrige el texto Dato a Añadir por Dato a Añadir/Borrar y anade las instrucciones necesarias para que al dar un clic en el botón Borrar, se borre el número puesto en el texto, si es que existe en el Vector, si no existe deberás de mandar un mensaje de error diciendo "Ese número no existe en el arreglo, no lo puedo borrar".
Ligas sugeridas

http://java.sun.com/docs/books/tutorial/collections/

Regresar                                                                                                                                                                       Siguiente