Capacitación de Java

Sintaxis del lenguaje Java

La Interfaz Set

Es una colección que no permite elementos repetidos. La interfaz Set contiene sólo métodos heredados de Collection y aumenta la restricción de elementos duplicados. Esta interfaz tiene un contrato con un comportamiento más específico en operaciones con equals y hashCode, permitiéndo a instancias de esta interfaz ser comparadas significativamente aún si el tipo de iimplementación difiere. Dos instancias de Set son iguales si ellas contienen los mismos elementos.

Java dispone de 3 implementaciones generales de Set: HashSet, TreeSet y LinkedHashSet. La primera HashSet, almacena sus elementos en una tabla Hash, es la implementación más eficiente. TreeSet, guardar sus elementos en un árbol, ordenando sus elementos en base a sus valores, y por lo tanto es más lento que un HashSet. LinkHashSet, por otro lado es implementada por una tabla Hash con una lista enlazada a través de ella, ordenando sus elementos en base a como han sido insertados. LinkedHashSet tiene un costo más alto de rendimiento que un HashSet.

Aquí tenemos un ejemplo. Supongamos que tenemos una Collection c, y queremos crear otra colección la cual contenga los mismos elementos pero todos los duplicados sean eliminados.

Collection<Type> noDuplicados = new HashSet<Type>(c);

Lo que hace esto es crear un Set, cuya definición no permite duplicados, inicialmente conteniendo todos los elementos en c. Usa el constructor por defecto de Collection.

Operaciones Básicas:

La operación size, retorna el número de elementos en el Set, su cardinalidad. El método isEmpty, hace exactamente lo que su nombre indica, verifica si se encuentra vacía. El método add, aumenta el elemento especificado, si este no se encuentra presente y retorna un booleano indicando si este fue o no insertado. Así mismo el método remove elimina el elemento especificado del Set si está presente. Retorna verdadero o falso si el elemento está o no presente. El método iterator retorna un Iterator sobre el Set.

public class BuscarDuplicados {
	Set<String> s = new HashSet<String>();
	for (String cadena : args)
            if (!s.add(a))
                System.out.println("Duplicados encontrados: " + cadena);

        System.out.println(s.size() + " palabras diferentes: " + s);

Nótese que el código se refiere a Collection por su interfaz Set al contrario de su implementación HashSet. Esto es muy recomendado, debido a que esto nos da la flexibilidad de cambiar las implementaciones simplemente cambiando el constructor. Si alguna de las variables usada para almacenar la colección o los parámetros usados para pasarlo por la implementación de Collection en lugar de su tipo de interfaz, todas esas variables y parámetros tendrán que ser cambiados para poder cambiar el tipo de su implementación.

El tipo de implementación de Set en el ejemplo anterior es HashSet, lo que garantiza que los elementos estén ordenados en el Set. Si deseamos que el programa imprima en orden alfabético, sólo cambiaríamos el tipo de implementación de HashSet a TreeSet.

Operaciones adicionales.

Supóngase que s1 y s2 son Sets, y las operaciones sobre estos:

Anterior Índice