Analise o seguinte trecho de código Java:import java.util.Se...
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?
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