Analise o seguinte trecho de código Java:import java.util.Se...

Próximas questões
Com base no mesmo assunto
Q2171692 Programação

Analise o seguinte trecho de código Java:

import java.util.Set;

import java.util.HashSet;

public class Conjunto {

       public static void main(String[] args) {

             Set <Integer> conjunto = new HashSet<Integer>();

              conjunto.add(2);

              conjunto.add(5);

               conjunto.add(1);

               conjunto.add(2);

               System.out.println(conjunto.toString());

         }

}


O que será escrito na saída padrão após a execução?

Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: D - [1, 2, 5]

Para entender a resposta correta, vamos abordar os conceitos envolvidos nessa questão:

O código Java em questão está utilizando a estrutura de dados chamada Set, que é uma coleção que não permite elementos duplicados. Isso significa que, mesmo que um código tente adicionar um elemento já existente ao conjunto, esse elemento não será adicionado novamente.

Além disso, a implementação específica utilizada é a HashSet, que não garante a ordem dos elementos, mas geralmente os armazena de acordo com a ordem do hash dos elementos. No entanto, a ordem de iteração pode parecer aleatória e pode variar de uma execução para outra, especialmente se o conjunto for modificado.

Ao analisarmos o trecho de código fornecido, vemos que há quatro tentativas de adição ao conjunto:

  • conjunto.add(2);
  • conjunto.add(5);
  • conjunto.add(1);
  • conjunto.add(2);

O método add é chamado quatro vezes. Nas três primeiras chamadas, os números 2, 5 e 1 são adicionados ao conjunto sem problemas. Contudo, na quarta chamada, está sendo feita uma tentativa de adicionar o número 2 novamente, o qual já existe no conjunto. Como já mencionado, a coleção Set não permite duplicatas, então essa segunda adição do número 2 é simplesmente ignorada.

Portanto, quando o método toString é chamado para imprimir o estado atual do conjunto, ele mostrará somente os elementos únicos que foram adicionados, ou seja, os números 1, 2 e 5. Note que, por causa da natureza do HashSet, a ordem pode variar, mas neste caso específico e para simplificar a compreensão, estamos assumindo que a ordem de inserção é respeitada.

Assim, a saída impressa na tela será:

[1, 2, 5]

É importante notar que a formatação estranha com as tags <integer> e </integer> no código original parece ser um erro de formatação no enunciado da questão e deve ser ignorada. O correto seria apenas <Integer> como já está no código, indicando que o conjunto é de elementos do tipo Integer.

Diante disso, a alternativa correta é a letra D, que apresenta o conjunto sem duplicatas e na ordem em que os elementos únicos foram inseridos.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

HashSet em Java não garante uma ordem constante na saída, o que poderia deixar certas tanto a alternativa B ou D, portanto a questão deveria ser anulada.

Lembrando que HashSet não aceita elementos repetidos, então o último .add() não seria adicionado.

Fonte: https://docs.oracle.com/javase/8/docs/api/java/util/HashSet.html

This class implements the Set interface, backed by a hash table (actually a HashMap instance). It makes no guarantees as to the iteration order of the set; in particular, it does not guarantee that the order will remain constant over time.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo