Sets y SortedSets

La interface Set sirve para acceder a una colección sin elementos repetidos. La colección puede estar o no ordenada (con un orden natural o definido por el usuario, se entiende). La interface Set no declara ningún método adicional a los de Collection.

Como un Set no admite elementos repetidos es importante saber cuándo dos objetos son considerados iguales (por ejemplo, el usuario puede o no desear que las palabras Mesa y mesa sean consideradas iguales). Para ello se dispone de los métodos equals() y hashcode(), que el usuario puede redefinir si lo desea.

Utilizando los métodos de Collection, los Sets permiten realizar operaciones algebraicas de unión, intersección y diferencia. Por ejemplo, s1.containsAll(s2) permite saber si s2 está contenido en s1; s1.addAll(s2) permite convertir s1 en la unión de los dos conjuntos; s1.retainAll(s2) permite convertir s1 en la intersección de s1 y s2; finalmente, s1.removeAll(s2) convierte s1 en la diferencia entre s1 y s2.

La interface SortedSet extiende la interface Set y añade los siguientes métodos:

Compiled from SortedSet.java
public interface java.util.SortedSet extends java.util.Set
{
public abstract java.util.Comparator comparator(); public abstract java.lang.Object first();
public abstract java.util.SortedSet headSet(java.lang.Object); public abstract java.lang.Object last();
public abstract java.util.SortedSet subSet(java.lang.Object, java.lang.Object); public abstract java.util.SortedSet tailSet(java.lang.Object);
}

que están orientados a trabajar con el “orden”. El método comparator() permite obtener el objeto pasado al constructor para establecer el orden. Si se ha utilizado el orden natural definido por la interface Comparable, este método devuelve null. Los métodos first() y last() devuelven el primer y último elemento del conjunto. Los métodos headSet(), subSet() y tailSet() sirven para obtener sub-conjuntos al principio, en medio y al final del conjunto original (los dos primeros no incluyen el límite superior especificado).

Existes dos implementaciones de conjuntos: la clase HashSet implementa la interface Set, mientras que la clase TreeSet implementa SortedSet. La primera está basada en una hash table y la segunda en un TreeMap.

Los elementos de un HashSet no mantienen el orden natural, ni el orden de introducción. Los elementos de un TreeSet mantienen el orden natural o el especificado por la interface Comparator. Ambas clases definen constructores que admiten como argumento un objeto Collection, lo cual permite convertir un HashSet en un TreeSet y viceversa.

Fuente: Aprenda Java como si estuviera en primero de la Universidad de Navarra