Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — FGV 2024

ProgramaçãoLinguagens de programação
Código
fg098207
Banca
FGV
Órgão
TJ-AP
Ano
2024
Nível
Superior
Cargo
Apoio Especializado - Tecnologia da Informação - Desenvolvimento de Sistemas
Considere o seguinte código em Java:Imagem associada para resolução da questãoAo ser executado com as importações necessárias, o código Java acima imprime na saída padrão:
  1. ACutias: 15, Amapá: 11, Itaubal: 13
  2. BAmapá: 11, Cutias: 15, Itaubal: 13
  3. C11, Amapá: 13, Itaubal: 15, Cutias
  4. D11: Amapá, 13: Itaubal, 15: Cutias
  5. E15: Cutias, 13: Itaubal, 11: Amapá
Revelar gabarito e comentário

GabaritoC — 11, Amapá: 13, Itaubal: 15, Cutias

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Coleções em Java: TreeMap e a ordenação por chave

Gabarito: letra C. O código utiliza um TreeMap, que armazena os pares chave-valor em ordem natural das chaves (ordem alfabética para String). Ao percorrer o mapa com um for-each sobre as chaves, a saída é 11, Amapá: 13, Itaubal: 15, Cutias — exatamente o que a alternativa C apresenta. A pegadinha está em confundir a ordem de inserção com a ordem de ordenação do TreeMap.

O TreeMap é uma implementação da interface Map que mantém suas entradas ordenadas pela chave, e não pela ordem em que foram inseridas. Isso é diferente do HashMap, que não garante nenhuma ordem específica, e do LinkedHashMap, que preserva a ordem de inserção. A ordenação do TreeMap é feita pela ordem natural das chaves (se elas implementarem Comparable) ou por um Comparator fornecido no construtor.

No código da questão, as chaves são String (nomes de municípios do Amapá: "Cutias", "Amapá", "Itaubal"). A ordem natural de String em Java é a ordem lexicográfica (alfabética), que compara os caracteres um a um. Vamos ordenar as chaves:

  1. "Amapá" — começa com 'A'.

  2. "Cutias" — começa com 'C'.

  3. "Itaubal" — começa com 'I'.

Portanto, a ordem de iteração será: "Amapá" (valor 11), "Cutias" (valor 15), "Itaubal" (valor 13). O for-each percorre as chaves nessa ordem e imprime chave + ": " + valor, resultando em:

11, Amapá: 13, Itaubal: 15, Cutias

A alternativa C é a única que reflete essa ordem e o formato de saída. As demais alternativas ou invertem a ordem (A, B, E) ou usam um formato incorreto de separador (D).

NÃO CAIA NESSA!

A banca explora a confusão entre a ordem de inserção e a ordem de ordenação do TreeMap. Muitos candidatos assumem que o mapa imprime na ordem em que os elementos foram adicionados (Cutias, Amapá, Itaubal), caindo nas alternativas A ou B. Lembre-se: TreeMap ordena pelas chaves, não pela inserção. Com treino, você identifica essa pegadinha de longe 💪.

  1. 1Inserção: Cutias, Amapá, Itaubal
  2. 2TreeMap ordena por chave (alfabética)
  3. 3Ordem: Amapá, Cutias, Itaubal
  4. 4Saída: chave: valor
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Apresenta a ordem de inserção (Cutias, Amapá, Itaubal), mas o TreeMap ordena as chaves alfabeticamente. A ordem correta é Amapá, Cutias, Itaubal.

Alternativa B — ❌ Incorreta

Embora comece com "Amapá", a ordem está errada: coloca "Cutias" antes de "Itaubal", mas a ordem alfabética correta é Amapá, Cutias, Itaubal. A alternativa A também erra ao colocar "Cutias" primeiro.

Alternativa C — ✅ Correta ⟵ GABARITO

Reflete exatamente a ordem de iteração do TreeMap (Amapá, Cutias, Itaubal) e o formato de saída chave: valor com vírgula entre os pares. É a única alternativa que acerta tanto a ordem quanto o formato.

Alternativa D — ❌ Incorreta

Usa o formato 11: Amapá (valor: chave), mas o código imprime chave: valor (ex.: Amapá: 11). Além disso, a ordem está correta, mas o formato está invertido.

Alternativa E — ❌ Incorreta

Apresenta a ordem inversa (Itaubal, Cutias, Amapá) e o formato valor: chave, ambos incorretos. O TreeMap itera em ordem crescente das chaves, não decrescente.

Gabarito: letra C

Link permanente: /questoes/fg098207