Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Por que usar Set para as chaves e Collection para os valores?

No exercício 7 da aula 10 do curso java.collection o instrutor implementa a solução desta forma:

import java.util.*;
import java.util.Map.Entry;

public class TesteMap {

    public static void main(String[] args) {

        Map<String, Integer> nomesParaIdade = new HashMap<>();
        nomesParaIdade.put("Paulo", 31);
        nomesParaIdade.put("Adriano", 25);
        nomesParaIdade.put("Alberto", 33);
        nomesParaIdade.put("Guilherme", 26);

    Set<String> chaves = nomesParaIdade.keySet();    
    for (String nome : chaves) {
            System.out.println(nome);
    }

    Collection<Integer> valores = nomesParaIdade.values();
    for (Integer idade : valores) {
            System.out.println(idade);
    }

    Set<Entry<String, Integer>> associacoes =             nomesParaIdade.entrySet();

    Set<Entry<String, Integer>> associacoes = nomesParaIdade.entrySet();    
    for (Entry<String, Integer> associacao : associacoes) {
        System.out.println(associacao.getKey() + " - " + associacao.getValue());
    }

Não consegui entender por que usar o Collection para retornar os valores.

1 resposta
solução!

Porque o método values() definido pela interface Map retorna uma coleção dos valores (values) definidos dentro do Map como se fossem uma lista então ele irá colocar na tela apenas as idades no código abaixo.

Collection<Integer> valores = nomesParaIdade.values();
    for (Integer idade : valores) {
            System.out.println(idade);
    }

Essa técnica é utilizada no caso de você querer apenas listar os valores de uma forma rápida e sem utilizar o Entry, pois um HashMap não funciona dentro de um forEach (Enhanced for).

Definição do método values() pelo JavaDoc

values()
    Returns a Collection view of the values contained in this map.

Existem outras formas de extrair valores de um Map uma dessas formas é utilizar a classe Iterator O código a seguir mostra como listar as chaves e os valores de um Map

Iterator it = nomesParaIdade.entrySet().iterator();
 while (it.hasNext()) {
    Map.Entry pair = (Map.Entry)it.next();
    System.out.println(pair.getKey() + " = " + pair.getValue());
}