import java.util.Collection;
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Iterator;
public class EjemploLista {
  public void recorrer(Iterator elIterador){
     while (elIterador.hasNext()) {//hay mas elementos?
       System.out.print(" "+elIterador.next());
     }
     System.out.println();
  }
  public void limpiar(Collection laColeccion) {
       laColeccion.clear();
      System.out.println(laColeccion.isEmpty());//imprime true
      System.out.println(laColeccion.size());//imprime 0
  }
  public List arregloLista() {
      List laLista= new ArrayList();
      for (int i=0;i<30;i++)
         laLista.add(new Integer(i));
      System.out.println(laLista);//imprimir contenido
      System.out.println(laLista.isEmpty());//imprime false
      System.out.println(laLista.size());//imprime 30
      System.out.println(laLista.contains(new Integer(15)));//true
      return laLista;
  }
  public List listaLigada() {//llenar a un objeto de tipo LinkedList
      List laLista= new LinkedList();
      for (int i=0;i<30;i++)
         laLista.add(new Double(i*Math.PI));
      System.out.println(laLista);//imprimir contenido
      System.out.println(laLista.isEmpty());//imprime false
      System.out.println(laLista.size());//imprime 30
      System.out.println(laLista.contains(new Integer(15)));//true
      return laLista;
  }
  public List listaDeListas() {//Llenar a un ArrayList con un LinkedList
      List laLista= new ArrayList();
      for (int i=0;i<5;i++) laLista.add(listaLigada());
      return laLista;
  }
  public void manipular(List laLista) {
       int capacidad = laLista.size();
       int indice = (int)( capacidad*Math.random() );
       Object o = laLista.get(indice);//leer un elemento dado un indice
       System.out.println("Clase:"+o.getClass()+":Valor:"+o);
       Object removido = laLista.remove(indice);
       System.out.println(removido);
       Object [] elArreglo = laLista.toArray();
       System.out.println(elArreglo);//referencia a un arreglo
  }
  public void especificoAEnteros(List laLista) {
       int capacidad = laLista.size();
       int indice = (int)( capacidad*Math.random() );
       Integer elEntero = (Integer) laLista.get(indice);//leer un elemento dado un indice
       System.out.println("Valor:"+elEntero);
  }
  public static void main(String [] args) {
      EjemploLista elEjemplo = new EjemploLista();
      List laLista=elEjemplo.arregloLista();
      elEjemplo.recorrer(laLista.iterator());
      elEjemplo.limpiar(laLista);
      List laListaLigada = elEjemplo.listaLigada();
      elEjemplo.recorrer(laListaLigada.iterator());
      elEjemplo.limpiar(laListaLigada);
      List listaDeListas = elEjemplo.listaDeListas();
      elEjemplo.recorrer(listaDeListas.iterator());
      elEjemplo.limpiar(listaDeListas);
      List otraLista = elEjemplo.arregloLista();
      elEjemplo.manipular(otraLista);
      elEjemplo.especificoAEnteros(otraLista);
      List otraListaDeListas = elEjemplo.listaDeListas();
      elEjemplo.especificoAEnteros(otraListaDeListas);//incorrecto
     
  }

}











