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
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.
//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:
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
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:
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());
}
}
}