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
.
class Producto { Producto(String s, int i) { nombre = s; cantidad = i; } String nombre; int cantidad; } |
Primeramente se define una Clase que será utilizada como el principal objeto en las agrupaciones ("Collections") descritas a continuación, esta Clase se encuentra compuesta por dos campos y un constructor para la asignación de valores.
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"); } } |
Como primer paso se importan las librerías de java.util.*
donde se concentran la gran mayoría de las Clases del "Collection Framework".
Posteriormente se inicia la declaración de la Clase seguido de su método principal main
.
Se definen 5 instancias de la Clase Producto
diseñada anteriormente, donde cada instancia recibe sus valores de acuerdo a la definición del Constructor.
Seguido son agregadas estas instancias al ArrayList
mediante el método add
, para posteriormente imprimir el número de Objetos en el "Collection" mediante el método size
.
Se declara una instancia Iterator
la cual facilita la extracción de objetos en "Collections", para así extraer los valores del ArrayList
e imprimirlos a pantalla.
Una vez impresos los valores del ArrayList
es eliminado el objeto con índice número 2, e impreso de nuevo el tamaño del ArrayList
con el método size
.
Se define otro ciclo de extracción a través de Iterator
para el ArrayList
, y finalmente se eliminan todos los valores del "Collection" mediante el método clear
.
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
).
Como primer paso se importan las librerías de java.util.*
donde se concentran la gran mayoría de las Clases del "Collection Framework".
Posteriormente se inicia la declaración de la Clase seguido de su método principal main
.
Se definen 5 instancias de la Clase Producto
diseñada anteriormente, donde cada instancia recibe sus valores de acuerdo a la definición del Constructor.
Seguido son agregadas estas instancias al HashSet
mediante el método add
, para posteriormente imprimir el número de Objetos en el "Collection" mediante el método size
.
Note que el número de elementos impresos no corresponde al mismo número insertado, lo anterior se debe a que en dos ocasiones se realizó la operación de inserción sobre la referencia q
, esta es una característica específica de todo Set
al no permitir elementos duplicados.
Posteriormente es definida una instancia Iterator
la cual facilita la extracción de objetos en "Collections", para así extraer los valores del HashSet
e imprimirlos a pantalla.
A diferencia de un ArrayList
, en un HashSet
no pueden ser eliminados valores individualmente ya que este tipo de "Collection" carece de un índice.
Finalmente se eliminan todos los valores del "Collection" mediante el método clear
.
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 .
Como primer paso se importan las librerías de java.util.*
donde se concentran la gran mayoría de las Clases del "Collection Framework".
Posteriormente se inicia la declaración de la Clase seguido de su método principal main
.
Se definen 5 instancias de String's
, donde cada instancia recibe determinado valor; en este caso no se definieron instancias de la Clase Producto para ilustrar la característica principal de un TreeSet
(Descrita a continuación) .
Seguido son agregadas estas instancias de String's
al TreeSet
mediante el método add
, para posteriormente imprimir el número de Objetos en el "Collection" mediante el método size
.
Es definida una instancia Iterator
la cual facilita la extracción de objetos en "Collections", para así extraer los valores del TreeSet
e imprimirlos a pantalla.
Note que en la impresión del TreeSet
ocurre lo siguiente: Los elementos son impresos por orden alfabético independientemente del orden de inserción, esta es una característica única de un TreeSet
, además de no incluirse ningún elemento duplicado, en este caso se descartó una instancia del String "Manzanas"
(Esta última característica pertenece a todo Set
).
Y finalmente se eliminan todos los valores del "Collection" mediante el método clear
.