Conjuntos
Java Collections - Conjuntos
Uma java.util.Set é uma coleção que se destaca por garantir a exclusividade dos elementos em um conjunto, isso quer dizer, só poderá haver um elemento de mesmo valor ou referência com base nas regras de comparação.
| Nome | Descrição | 
|---|---|
| HashSet | Uma coleção exclusiva e com alto desempenho | 
| LinkedHashSet | Uma coleção exclusiva e ordenada pela inserção | 
| TreeSet | Uma coleção exclusiva, ordenada e classificada pela ordem natural dos elementos | 
A partir de agora vamos explorar a proposta principal em se usar Set em um cenário aonde avaliaremos as particularidades de cada classe baseadas em contextos diferentes.
Uma universidade abriu o perÃodo de matrÃcula dos alunos para cursarem ADS - Análise e Desenvolvimento de Sistemas. Nesta primeira fase, o único requisito é que uma pessoa não possa estar repetidamente na lista de inscritos.

import java.util.*;
public class Conjuntos {
    public static void main(String[] args) {
        HashSet inscritos = new HashSet();
        inscritos.add("Marcos");
        inscritos.add("Lucas");
        inscritos.add("Antonio");
        inscritos.add("Mirela");
        inscritos.add("Alessandra");
        inscritos.add("Felipe");
        inscritos.add("Sofia");
        // opa Lucas já fez a sua inscrição
        inscritos.add("Lucas");
        imprimirInscritos(inscritos);
        
        /**
         * Alessandra
         * Felipe
         * Mirela
         * Sofia
         * Marcos
         * Lucas
         * Antonio
         */
    }
    // não se assuste com o nÃvel de abstração, em breve você vai entender
    static void imprimirInscritos(Collection inscritos){
        System.out.println("***Listando os inscritos***");
        for(Object inscrito: inscritos){
            System.out.println(inscrito);
        }
    }
}
Ao executar o nosso programa precisamos analisar duas caracterÃsticas em se utilizar HashSet.
- Esta coleção garantiu a não duplicidade dos elementos
 - Porém ela não considerou algum tipo de ordem, de interação ou classificação natural.
 
Por uma questão estratégia a universidade resolveu criar uma promoção para acelerar as inscrições aonde os 50 primeiros inscritos ganhariam 50% na matrÃcula. Neste contexto a ordem dos inscritos passará a ter relevância, logo, é recomendado usar LinkedHashSet para garantir esta ordem de inserção.
Execute o seu programa mais de uma vez para confirmar que os elementos serão impressos garantindo a ordem de inserção.
Set inscritos = new LinkedHashSet();
inscritos.add("Marcos");
inscritos.add("Lucas");
inscritos.add("Antonio");
inscritos.add("Mirela");
inscritos.add("Alessandra");
inscritos.add("Felipe");
inscritos.add("Sofia");
// opa Lucas já fez a sua inscrição
inscritos.add("Lucas");
imprimirInscritos(inscritos);
Chegou o grande dia em dar a notÃcia aos alunos que foram selecionados para cursarem ADS e o administrativo solicitou que a lista de aprovados já retornasse os candidatos em ordem alfabética.
Existem algorÃtimos para realizar a classificação de uma coleção, porém neste primeiro momento, iremos explorar a proposta principal em se usar TreeSet.
Set inscritos = new TreeSet();
inscritos.add("Marcos");
inscritos.add("Lucas");
inscritos.add("Antonio");
inscritos.add("Mirela");
inscritos.add("Alessandra");
inscritos.add("Felipe");
inscritos.add("Sofia");
imprimirInscritos(inscritos);
Você precisa ter ciência que este algorÃtimo de classificação automática em
TreeSet exige um tempo de processamento, logo se a performance para inclusão for um requisito essencial, use HashSet e depois execute a classificação de toda a coleção. Veja uma alternativa abaixo.Set inscritos = new HashSet();
inscritos.add("Marcos");
inscritos.add("Lucas");
inscritos.add("Antonio");
inscritos.add("Mirela");
inscritos.add("Alessandra");
inscritos.add("Felipe");
inscritos.add("Sofia");
Set aprovados = new TreeSet(inscritos);
imprimirInscritos(aprovados);