Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Map

Olá,

No último capítulo do curso "Java: Dominando as Collections", o professor Paulo Silveira explicou que o HashMap possui a mesma estrutura do HashSet em relação a não guardar a ordem de inserção. No entanto, quando executei o último exemplo proposto pelo professor, notei que, mesmo usando o HashMap, os objetos foram impressos conforme ordem de inserção.

O código é:

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();
        for (Entry<String, Integer> associacao : associacoes) {
            System.out.println(associacao.getKey() + " - " + associacao.getValue());
        }
    }

E o resultado impresso foi:
Paulo
Adriano
Alberto
Guilherme
31
25
33
26
Paulo - 31
Adriano - 25
Alberto - 33
Guilherme - 26

Estou com dificuldades para entender. Peço desculpas se cometi algum equívoco e deixei passar algum detalhe. Mas agradeço desde já!

2 respostas
solução!

Olá,

A especificação não garante a ordem, e também não garante que a mesma ordem se mantenha durante o tempo. Perceba que internamente há uma implementação, um algoritmo que mantém essa estrutura. Há dois fatores que influenciam e muito neste algoritmo: capacidade inicial e fator de carga. Tente testar com uma massa de dados maior, e algumas vezes, é possível que tenha saídas diferentes.

Espero ter ajudado,

Muito obrigada por esclarecer a minha dúvida, Fagner!