Avatar ·

Qual é a diferença entre HashMap, LinkedHashMap e TreeMap em Java?

Olá a todos! Comecei a estudar Java recentemente e me deparei com um problema ao trabalhar com Mapas (Map). Existem três implementações principais: HashMap, LinkedHashMap e TreeMap. Li a documentação, mas ainda não entendo completamente quando usar cada uma.

Por exemplo, tenho uma tarefa: preciso armazenar uma lista de estudantes com seus IDs (chave — Integer, valor — String). Escrevi o seguinte código:

Map<Integer, String> students = new HashMap<>();
students.put(3, "Anna");
students.put(1, "Ivan");
students.put(2, "Maria");
System.out.println(students);

A saída foi desordenada: {1=Ivan, 2=Maria, 3=Anna}. Por que a ordem não corresponde à ordem de inserção? E o que acontecerá se eu substituir HashMap por LinkedHashMap ou TreeMap?

Também ouvi dizer que eles têm desempenho diferente. Em quais situações o HashMap é mais rápido e quando é melhor usar TreeMap? E como eles lidam com chaves null?

Agradeço por uma explicação detalhada com exemplos, para que eu possa