Otro tipo de colección muy interesante son los Mapas. Los mapas son colecciones de parejas clave-valor. Podría decirse que son como los arrays pero en lugar de usar un índice consecutivo que marca la posición del elemento en el array, vamos a utilizar una clave asociada a cada elemento.
La clase HashMap
La clase HashMap tiene la siguiente sintaxis:
HashMap<tipo clave,tipo de elemento>nombreDelMap= new HashMap<>();
Para trabajar con mapas vamos a utilizar la clase HashMap. Practiquemos con ella en la siguiente actividad:
Actividad: Practicando con la clase HashMap
- Continuamos trabajando con el proyecto con el que practicamos con las clases ArrayList y HashSet, para practicar ahora con mapas utilizando la clase HashMap.
- En la clase PracticandoConListas, utilizamos el método HashMap, para trabajar con Mapas: parejas clave-valor. Trabajaremos con la clase Estudiante, usaremos como clave un Integer que representa el número de matrícula del estudiante y como valor un objeto Estudiante. El código de esta clase quedaría.
import java.util.HashMap;
public class PracticandoConListas {
public static void main(String[] args) {
HashMap<Integer,Estudiante>estudiantesPorNumero= new HashMap<>();
estudiantesPorNumero.put(001,new Estudiante("Maria",23,"Fisica"));
estudiantesPorNumero.put(002,new Estudiante("Juan",21,"Fisica"));
estudiantesPorNumero.put(003,new Estudiante("Fabiola",22,"Marketing"));
estudiantesPorNumero.put(004,new Estudiante("Maria",23,"Lengua"));
Estudiante estudiante = estudiantesPorNumero.get(003);
System.out.println(estudiante);
}
}
- Declaramos un objeto HashMap de nombre estudiantesPorNumero, donde la clave es de tipo Integer y el valor de tipo Estudiante.
HashMap<Integer,Estudiante>estudiantesPorNumero= new HashMap<>();
- Colocamos la parejas clave-valor en el Mapa. El método utilizado es put(), similar a add() en las listas.
estudiantesPorNumero.put(001,new Estudiante("Maria",23,"Fisica"));
estudiantesPorNumero.put(002,new Estudiante("Juan",21,"Fisica"));
estudiantesPorNumero.put(003,new Estudiante("Fabiola",22,"Marketing"));
estudiantesPorNumero.put(004,new Estudiante("Maria",23,"Lengua"));
- Recuperamos un objeto Estudiante a partir de su clave con la función get() a la que se pasa la clave como parámetro.
Estudiante estudiante = estudiantesPorNumero.get(003);
- Si ejecutamos el programa, el resultado obtenido sería:
run:
Estudiante{nombre=Fabiola, edad=22, titulacion=Marketing}
BUILD SUCCESSFUL (total time: 0 seconds)
- La clave es un indicador único que no admite duplicados. Si intentamos introducir un Estudiante nuevo con una clave existente, sencillamente se actualiza el valor asociado a dicha clave con el Estudiante nuevo que estamos introduciendo. Para verlo en el programa, podemos cambiar la clave del último estudiante, del valor 004 al valor 003. Estaríamos introduciendo la clave 003 en dos ocasiones, por lo que la segunda vez, se actualizaría el valor asociado a dicha clave.
- Si hacemos el cambio propuesto y ejecutamos el programa, el resultado que obtenemos es el siguiente:
run:
Estudiante{nombre=Maria, edad=23, titulacion=Lengua}
BUILD SUCCESSFUL (total time: 0 seconds)
- El estudiante asociado a la clave 003 es María en lugar de Fabiola. La clase HashMap no admite dos claves iguales. En general, el prefijo Hash en un nombre de una clase, indicará unicidad.
- Una función comúnmente usada es keySet() que la empleamos para obtener un Set con todas las claves, es decir, una lista de las claves. Para ver como utilizaríamos este método, actualizamos nuestro código a:
import java.util.HashMap;
import java.util.Set;
public class PracticandoConListas {
public static void main(String[] args) {
HashMap<Integer,Estudiante>estudiantesPorNumero= new HashMap<>();
estudiantesPorNumero.put(001,new Estudiante("Maria",23,"Fisica"));
estudiantesPorNumero.put(002,new Estudiante("Juan",21,"Fisica"));
estudiantesPorNumero.put(003,new Estudiante("Fabiola",22,"Marketing"));
estudiantesPorNumero.put(003,new Estudiante("Maria",23,"Lengua"));
Estudiante estudiante = estudiantesPorNumero.get(003);
System.out.println(estudiante);
Set<Integer> claves = estudiantesPorNumero.keySet();
for (Integer clave: claves){
System.out.println(clave + " --> "+estudiantesPorNumero.get(clave));
}
}
}
Definimos nuestra lista de claves empleando la función keySet():
Set<Integer> claves = estudiantesPorNumero.keySet();
Usando un bucle for-each presentamos todos los datos, las claves y los valores asociados, que recuperamos empleando la función get() a la que pasamos la clave como parámetro.
- El resultado de la ejecución del programa es:
run:
Estudiante{nombre=Maria, edad=23, titulacion=Lengua}
1 --> Estudiante{nombre=Maria, edad=23, titulacion=Fisica}
2 --> Estudiante{nombre=Juan, edad=21, titulacion=Fisica}
3 --> Estudiante{nombre=Maria, edad=23, titulacion=Lengua}
BUILD SUCCESSFUL (total time: 0 seconds)
NOTA: Este post es parte de la colección “Java”. Puedes ver el índice de esta colección aquí.