Avatar ·

¿Cuál es la diferencia entre HashMap, LinkedHashMap y TreeMap en Java?

¡Hola a todos! Acabo de empezar a aprender Java y me encontré con un problema al trabajar con Map. Hay tres implementaciones principales: HashMap, LinkedHashMap y TreeMap. Leí la documentación, pero no termino de entender cuándo usar cada una.

Por ejemplo, tengo una tarea: necesito almacenar una lista de estudiantes con sus ID (clave — Integer, valor — String). Escribí este código:

Map<Integer, String> students = new HashMap<>();
students.put(3, "Anna");
students.put(1, "Iván");
students.put(2, "María");
System.out.println(students);

La salida resultó desordenada: {1=Iván, 2=María, 3=Anna}. ¿Por qué el orden no coincide con el orden de inserción? ¿Y qué pasará si reemplazo HashMap por LinkedHashMap o TreeMap?

También he oído que tienen diferente rendimiento. ¿En qué situaciones HashMap es más rápido y cuándo es mejor usar TreeMap? ¿Y cómo trabajan con claves null?

¡Agradecería una explicación detallada con ejemplos para poder entenderlo mejor!