Contenedores I: Colecciones y Iteradores

Ten cuidad porque es un poco lioso. Para empezar, a parte de los arrays, que tienen sus utilidades y que se definen con tipoPrimitivo[] nombreDeArray = new tipoPrimitivo[longitud]. ( el capitulo anterior va sobre esto mismo) Existen en java las clases contenedoras. Una Clase contenedora es una clase que almacena Objetos como objetos, por lo que cuando metes algo en una clase contenedora pasa a ser un objeto por herencia y no el objeto concreto que era. Buff… que lioso. Veamos. Si hago una clase contenedora de Palomas, lo que almaceno son Objetos y no Palomas. Por lo que si introduzco una Paloma en el objeto contenedor, al extraerlo tendré que volver a decirle a java que lo que has metido es una Paloma. Porque el contenedor almacena objetos y le importa un bledo que ese objeto sea una paloma o cualquier otra cosa. Una vez aclarado esto vamos a ver las clases contenedoras y que es lo que hacen.

Es bastante lioso a partir de aqui, por lo que, aunque intentaré sintetizar puede que en algún momento me equivoque.

Hay tres clases básicas de contenedores List, Set y Map

Colecciones

Colección es el nombre genérico de la clase abstracta que contiene las clases contenedoras List y Set . Empecemos por las listas pueden ArrayList y LinkedList. Ambas son colecciones. La ventaja con los arrays es que son mas fáciles de manipular, aunque mas lentos…. creo.

  • Se declara con Collection lista = new TipoDeCollection()
  • Se introducen nuevos valores con lista.add(“cadena”)
  • Se sacan valores con lista.get(posicion)
//ImprimirContenedores.java
// Ejemplo de tres tipos de contenedores
// Los contenedores pueden ser o colecciones o mapas.... mas o menos
import java.util.*;
public class ImprimirContenedores{
	static Collection rellenar(Collection c){
		c.add("perro");
		c.add("gato");
		c.add("pájaro");
		// primero introduzco los valores y luego deuelvo la coleccion
		return c;
	}
	static Map rellenar(Map m){
		m.put("perro","dálmata");
		m.put("gato","persa");
		m.put("pájaro","canario");
		// primero introduco valores y luego devuelvo el mapa
		return m;
	}
	public static void main(String[] args){
		System.out.println(rellenar(new ArrayList() ) );
		System.out.println(rellenar(new HashSet() ) );
		System.out.println(rellenar(new HashMap() ) );
	}
}

Toda colección tiene una serie de métodos que listas y set heredarán:

  • boolean add(object) : Añade un objeto a la coleccion.
  • boolean addAll(Collection) : Añade todos los elementos de la coleccion que se pasa a la coleccion destino.
  • void clear() : Elimina todos los elementos del contenedor
  • boolean contains(Object) : Verdadero si el contenedor contiene el objeto
  • boolean isEmpty() : Veradero si el contenedor no tiene elementos
  • Iterator iterator() : Devuelve un Iterator que se puede usar para recorrer los elementos
  • boolean remove(Object) : Si el parametro esta en el contenedor devuelve verdadero si se elimina una instancia de ese elemento.
  • boolean removeAll(Collection) : Elimina todos los elementos contenidos en el parametro.
  • boolean retainAll(Collection) : Mantiene sólo los elementos contenidos en el parámetro. Devuelve verdadero si se produjo algún cambio.
  • int size() : Devuelve el número de elementos del contenedor
  • Object toArray() : Devuelve un array con los elementos del contenedor
  • Object toArray(Object a) : devuelve un array con todos los elementos del contenedor cuyo tipo es a.

Y de todo esto lo más interesante son los Iteradores que es un objeto que nos permite recorrer el contenedor de forma faci y divertida

Iteradores

Un iterador no es mas que un objeto para recorrer secuencialmente una coleccion. Sus principales ( si es que no son los únicos) métodos son:

  • next() que nos lleva al siguiente objeto de la lista
  • hasNext() que nos dice si hay un siguiente o no
  • remove() que borra el ultimo objeto devuelto por el iterador.

Aqui tienes un ejemplo para que veas como funciona:

// Iterador.java
// NO TE OLVIDES DE IMPORTAR EL JAVA.UTIL.* ¡QUE SI NO NO ENCUENTRA EL ITERATOR!
import java.util.*;
public class Iterador{
public static void main(String args[]){
  	ArrayList lista = new ArrayList();
	for (int i=0; i<9; i++){
		lista.add("cosa número "+Integer.toString(i));
	}
	// aqui paso la lista a un iterador
	Iterator secuencia = lista.iterator();
	// ahora secuencia tiene los elementos de la lista
	while(secuencia.hasNext()){
		// recuerda que el contenedor no sabe lo que hay.
		// no haría falta en este caso, pero mejor acostumbrarse
		// desde el principio a hacer las conversiones
		System.out.println((String)secuencia.next());
	}
}
}
 
java/14.txt · Última modificación: 2008/05/13 10:00 (editor externo)
 
Excepto donde se indique lo contrario, el contenido de esta wiki se autoriza bajo la siguiente licencia:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki