En PC Resumen hablaremos de los conjuntos. Un objeto Set es un objeto Collection que contiene elementos únicos (no duplicados). El marco de trabajo de colecciones contiene diferentes implementaciones de Set incluyendo HashSet y TreeSet. El primer almacena los elementos en una tabla hash y el segundo en un árbol. El concepto de hash lo veremos en el punto siguiente En el programa siguiente utilizamos un objeto HashSet para eliminar las cadenas duplicadas de un objeto List.

import java.util.List;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.Collection;

public class PruebaSet {
    private static final String colores[] = {"rojo", "blanco", "azul", "verde", "gris", "naranja", "carne", "blanco", "cyan", "gris", " naranja "};
    
    public PruebaSet() {
        List<String> lista = Arrays.asList(colores);
        System.out.printf("ArrayList: %s \n", lista);
        imprimirSinDuplicados(lista);
    }

    private void imprimirSinDuplicados(Collection<String> coleccion) {
        Set<String> conjunto = new HashSet<String>(coleccion);
        System.out.println("\nLos valores sin duplicados son: ");
        for (String s: conjunto) {
            System.out.printf ("%s", s);
        }
        System.out.println();
    }

    public static void main(String args[]) {
        new PruebaSet();
    }
}

Conjuntos ordenados

El marco de trabaja de colecciones incluye también la interfaz SortedSet (que extiende a Set) para conjuntos que mantengan sus elementos ordenados, ya sea en el orden natural de los elementos o por un orden especificado por un objeto Comparator. La clase TreeSet implementa a SortedSet. El programa siguiente coloca cadenas en un TreeSet. Este programa demuestra también los métodos de vista de rango, los cuales permiten a un programa ver una porción de una colección.

import java.util.Arrays;
import java.util.SortedSet;
import java.util.TreeSet;

public class PruebaSortedSet {
    private static final String nombres[] = {"amarillo", "verde", "Negro", "carne", "gris", "blanco", "naranja", "rojo", "verde"};
   
    public PruebaSortedSet() {
        SortedSet<String> arbol = new TreeSet<String>(Arrays.asList(nombres));
        System.out.println("conjunto ordenado:");
        imprimirConjunt(arbol);
        System.out.print("\nheadSet(\"naranja\"):");
        imprimirConjunto(arbol.headSet("naranja"));
        System.out.print("tailSet(\"naranja\"):");
        imprimirConjunto(arbol.tailSet("naranja"));
        System.out.printf("primero: %s \n", arbol.first());
        System.out.printf("ultimo: %s \n", arbol.last());
    }

    private void imprimirConjunto(SortedSet<String> conjunto) {
        for (String s: conjunto) {
            System.out.print(s + "");
        }
        System.out.println ();
    }

    public static void main(String args[]) {
        new PruebaSortedSet();
    }
}

En este programa se hace una llamada al método Headset para obtener un subconjunto del árbol en el que todos los elementos serán menores que "naranja". Si se hace algún cambio en el subconjunto, éste se reflejará también en el objeto TreeSet original.

Después se hace un llamamiento a tailSet para obtener un subconjunto en el que cada elemento será igual o mayor que "naranja".

Finalmente utilizamos los métodos first, last para obtener el elemento más pequeño y el más grande del conjunto.

Pin It