Médio Java
Conjunto de números únicos com HashSet
Enunciado
Crie um programa que use HashSet para armazenar números inteiros. Adicione os valores 10, 20, 10, 30 e 20. Imprima o conjunto resultante e a quantidade de elementos. Em seguida, verifique se o número 20 está presente e imprima uma mensagem.
Requisitos
- Usar
HashSetda biblioteca padrão. - Adicionar os cinco valores na ordem indicada.
- Imprimir o conjunto, sua quantidade e se contém o número 20.
Código inicial
import java.util.HashSet;
import java.util.Set;
public class ConjuntoUnico {
public static void main(String[] args) {
// TODO: use HashSet, adicione os números e imprima
}
}
Saída esperada
Conjunto: [10, 20, 30]
Quantidade: 3
Contém 20? true
Ver dica
HashSet ignora automaticamente duplicatas. Use add() para inserir e contains() para verificar presença.
Mostrar solução
import java.util.HashSet;
import java.util.Set;
public class ConjuntoUnico {
public static void main(String[] args) {
// Cria um HashSet de inteiros
Set<Integer> numeros = new HashSet<>();
// Adiciona valores, duplicatas serão ignoradas
numeros.add(10);
numeros.add(20);
numeros.add(10); // duplicata
numeros.add(30);
numeros.add(20); // duplicata
// Imprime o conjunto e a quantidade
System.out.println("Conjunto: " + numeros);
System.out.println("Quantidade: " + numeros.size());
// Verifica se contém 20
System.out.println("Contém 20? " + numeros.contains(20));
}
}
Passo a passo
- Importamos
HashSeteSet. - Criamos um
Set<Integer>chamadonumeroscomnew HashSet<>(). - Adicionamos 10, 20, 10, 30 e 20. O
HashSetignora as duplicatas 10 e 20. - Imprimimos o conjunto. A ordem pode variar, mas no exemplo os elementos são exibidos como
[10, 20, 30]. numeros.size()retorna 3, pois só há três elementos únicos.numeros.contains(20)retornatrue.
Por que funciona
O HashSet usa uma tabela hash para armazenar elementos, garantindo que não haja duplicatas. A verificação de duplicatas é feita pelos métodos equals() e hashCode() dos objetos. Para inteiros, isso é automático.
Erros comuns
- Tentar acessar elementos por índice:
Setnão temget(index). Use um iterador ou converta para lista se precisar de ordem. - Esperar uma ordem específica:
HashSetnão garante ordem. Se precisar de ordem de inserção, useLinkedHashSet; se precisar de ordem natural, useTreeSet.
Outra forma de resolver
Usar LinkedHashSet para manter a ordem de inserção:
Set<Integer> numeros = new LinkedHashSet<>();
A saída seria [10, 20, 30] na ordem em que foram adicionados.
Saída esperada
Conjunto: [10, 20, 30]
Quantidade: 3
Contém 20? true