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);