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 HashSet da 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

  1. Importamos HashSet e Set.
  2. Criamos um Set<Integer> chamado numeros com new HashSet<>().
  3. Adicionamos 10, 20, 10, 30 e 20. O HashSet ignora as duplicatas 10 e 20.
  4. Imprimimos o conjunto. A ordem pode variar, mas no exemplo os elementos são exibidos como [10, 20, 30].
  5. numeros.size() retorna 3, pois só há três elementos únicos.
  6. numeros.contains(20) retorna true.

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: Set não tem get(index). Use um iterador ou converta para lista se precisar de ordem.
  • Esperar uma ordem específica: HashSet não garante ordem. Se precisar de ordem de inserção, use LinkedHashSet; se precisar de ordem natural, use TreeSet.

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