Utilización de List, Set y SortedSet

De entrada vale recordar que las interfases List, Set y SortedSet son descendientes de la interfase global Collection, por lo que el concepto de Polimorfismo aplica para todas las Clases mencionadas a continuación.

Las Clases del JDK que implementan la interfase List son: ArrayList y LinkedList

Las Clases del JDK que implementan la interfase Set son: HashSet y LinkedHashSet, mientras que la clase TreeSet implementa la sub-interfase SortedSet.

Código Fuente Producto.java

 
class Producto
{

    Producto(String s, int i)
    {
        nombre = s;
        cantidad = i;
    }

    String nombre;
    int cantidad;
}

Código Fuente Mercado.java

 
import java.util.*;

public class Mercado
{

    public static void main(String args[])
    {
	// Definir 5 instancias de la Clase Producto
        Producto m = new Producto("Pan", 6);
        Producto n = new Producto("Leche", 2);
        Producto o = new Producto("Manzanas", 5);
        Producto p = new Producto("Brocoli", 2);
        Producto q = new Producto("Carne", 2);

	// Definir un ArrayList 
        ArrayList mandado = new ArrayList();

	// Colocar Instancias de Producto en ArrayList 
        mandado.add(m);
        mandado.add(n);
        mandado.add(o);
        mandado.add(p);
	// Indica el indice de inserción 
        mandado.add(1, q);
        mandado.add(q);

	// Imprimir contenido de ArrayLists
        System.out.println(" - Lista de mandado con " + mandado.size() + " elementos");
	

	// Definir Iterator para extraer/imprimir valores 

        for( Iterator it = mandado.iterator(); it.hasNext(); ) { 
	    Producto x = (Producto)it.next();
	    System.out.println(x.nombre + " : " + x.cantidad);

	}
   

	// Eliminar elemento de ArrayList
        mandado.remove(2);
        System.out.println(" - Lista de mandado con " + mandado.size() + " elementos");
	// Definir Iterator para extraer/imprimir valores 

        for( Iterator it2 = mandado.iterator(); it2.hasNext();) { 
	    
	    Producto x = (Producto)it2.next();
	    System.out.println(x.nombre + " : " + x.cantidad);

	}

	// Eliminar todos los valores del ArrayList
        mandado.clear();
        System.out.println(" - Lista de mandado final con " + mandado.size() + " elementos");
    }
}

Codigo Fuente Mercado2.java

 
import java.util.*;

public class Mercado2
{

    public static void main(String args[])
    {
	// Definir 5 instancias de la Clase Producto
        Producto m = new Producto("Pan", 6);
        Producto n = new Producto("Leche", 2);
        Producto o = new Producto("Manzanas", 5);
        Producto p = new Producto("Brocoli", 2);
        Producto q = new Producto("Carne", 2);

	// Definir un HashSet
        HashSet mandado = new HashSet();
        mandado.add(m);
        mandado.add(n);
        mandado.add(o);
        mandado.add(p);
        mandado.add(q);
	// Doble inserción de Objeto/referencia q
        mandado.add(q);

	// Imprimir contenido de HashSet
	// Aunque son insertados 6 elementos, el HashSet solo contiene 5
	// Lo anterior se debe a que un Set no permite elementos duplicados (q)

        System.out.println(" - Lista de mandado con " + mandado.size() + " elementos");

	// Definir Iterator para extraer/imprimir valores 

        for( Iterator it = mandado.iterator(); it.hasNext();) { 
	    Producto x = (Producto)it.next();
	    System.out.println(x.nombre + " : " + x.cantidad);

	}

	// No es posible eliminar elementos por indice
	// Un HashSet no ofrece este mecanismo, solo eliminación por valor de Objeto

	// Eliminar todos los valores del ArrayList
	mandado.clear();
        System.out.println(" - Lista de mandado final con " + mandado.size() + " elementos");
    }
}

Esta Clase es muy similar a la anterior (Mercado.java) , solo que en este caso se emplea un HashSet para agrupar los elementos, a continuación se describen las diferencias entre emplear este "Collection" y el inicial (ArrayList).

Codigo Fuente Mercado3.java

 
import java.util.*;

public class Mercado3
{

    public static void main(String args[])
    {
	// Definir 5 instancias de String 
        String m = new String("Pan");
        String n = new String("Leche");
        String o = new String("Manzanas");
        String p = new String("Brocoli");
        String q = new String("Carne");
        String r = new String("Manzanas");

	// Definir un TreeSet
        TreeSet mandado = new TreeSet();
        mandado.add(m);
        mandado.add(n);
        mandado.add(o);
        mandado.add(p);
        mandado.add(q);
        mandado.add(r);

	// Imprimir contenido de TreeSet
	// Aunque son insertados 6 elementos, el TreeSet solo contiene 5
	// Lo anterior se debe a que un TreeSet no permite elementos duplicados,
	// a pesar que son empleados Objetos distintos, el TreeSet detecta que el 
	// elemento "Manzanas" es duplicado

        System.out.println(" - Lista de mandado con " + mandado.size() + " elementos");
	// Definir Iterator para extraer/imprimir valores 

        for( Iterator it = mandado.iterator(); it.hasNext();) { 
	    
	    // Notese que el orden del TreeSet refleja un orden descendente 
	    // en sus elementos independientemente del orden de inserción.
	    // Debido al uso de String's esto refleja un orden alfabético
	    String x = (String)it.next();
	    System.out.println(x);

	}

	// No es posible eliminar elementos por indice
	// Un TreeSet no ofrece este mecanismo, solo eliminación por valor de Objeto

	// Eliminar todos los valores del TreeSet
        mandado.clear();
        System.out.println(" - Lista de mandado final con " + mandado.size() + " elementos");
    }
}

Esta Clase es muy similar a la inicial (Mercado.java) , solo que en este caso se emplea un TreeSet para agrupar los elementos, a continuación se describen las diferencias entre emplear este "Collection" y los otros dos mencionados en esta sección .

Menú Curso

Objetos, Java y JDK

Composición, Clases y Librerías("Packages").

Variables, Constructores, Métodos y Comentarios.

Herencias ("Inheritance"), Condicionales y Ciclos

Operadores, Errores y Datos de Entrada/"Streams".

Interfases, Arreglos y Polimorfismo.

Collections Framework, "Threads", Garbage Collection y "Assertions".

Java 5 / JDK 5 .

Instalación Software.

Codigo.