En la agenda buscas por nombre
En la agenda del móvil escribes "Marta" y sale su teléfono. No cuentas cuántos contactos hay antes que ella.
Una lista busca por posición. Pero muchas veces quieres buscar por un nombre.
Para eso Java tiene los mapas. Y para guardar cosas sin repetirlas, los conjuntos.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| HashMap | Un mapa: guarda parejas de clave y valor. Buscas por la clave. | HashMap<String, Integer> |
| Clave | Lo que usas para buscar. En un mapa no se repite. | "café" |
| Valor | Lo que guardas junto a la clave. | 1 |
| HashSet | Un conjunto: guarda valores sin repetir ninguno. | HashSet<String> |
| null | Quiere decir "no hay nada". Un mapa lo da si la clave no existe. | prices.get("tortilla") |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Parejas de clave y valor
Piensa en la carta del bar del instituto. Cada producto tiene su precio: bocadillo 3 euros, café 1 euro.
En un HashMap<String, Integer> la clave es el producto y el valor es el precio. Entre los signos < y > van dos tipos: el de la clave y el del valor.
Con put guardas una pareja. Con get pides el valor de una clave.
Pruébalo: la carta del bar
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
HashMap<String, Integer> prices = new HashMap<String, Integer>();
prices.put("bocadillo", 3);
prices.put("café", 1);
prices.put("zumo", 2);
System.out.println("Un café cuesta " + prices.get("café") + " euro.");
System.out.println("Productos: " + prices.size());
// La misma clave otra vez: cambia el valor, no añade otra pareja.
prices.put("café", 2);
System.out.println("Ahora el café cuesta " + prices.get("café"));
System.out.println("Productos: " + prices.size());
System.out.println(prices.containsKey("tortilla"));
System.out.println(prices.get("tortilla"));
}
}
Ejemplo resuelto: el mapa paso a paso
| Orden | Parejas del mapa | size() |
|---|---|---|
| Se crea vacío | ninguna | 0 |
| put("bocadillo", 3), put("café", 1), put("zumo", 2) | bocadillo=3, café=1, zumo=2 | 3 |
| put("café", 2) | bocadillo=3, café=2, zumo=2 | 3 |
| remove("zumo") | bocadillo=3, café=2 | 2 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Una clave que no existe da null
Advertencia
Si pides con get una clave que no está, el resultado es null. Guardarlo en un int rompe el programa con una excepción. Antes pregunta con containsKey, o usa getOrDefault con un valor de repuesto.
Contar con un mapa
Un uso muy común: contar cuántas veces sale cada cosa. La clave es la cosa y el valor es la cuenta.
Con getOrDefault(clave, 0) pides la cuenta y, si la clave no está, te devuelve 0.
Para recorrer todas las claves, keySet() te las da. Úsalo con el for de cada valor.
Pruébalo: contar los votos
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
String[] votes = {"si", "no", "si", "si", "no"};
HashMap<String, Integer> counts = new HashMap<String, Integer>();
for (int i = 0; i < votes.length; i++) {
// Si el voto no estaba, parte de 0.
counts.put(votes[i], counts.getOrDefault(votes[i], 0) + 1);
}
System.out.println("Síes: " + counts.get("si"));
System.out.println("Noes: " + counts.get("no"));
int total = 0;
for (String option : counts.keySet()) {
total = total + counts.get(option);
}
System.out.println("Votos en total: " + total);
}
}
Ejemplo resuelto: las cuentas voto a voto
| Voto | Cuentas después |
|---|---|
| si | si=1 |
| no | si=1, no=1 |
| si | si=2, no=1 |
| si | si=3, no=1 |
| no | si=3, no=2 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Repaso rápido
Inténtalo
Repaso rápido
3 preguntasTus respuestas se corrigen aquí y no se guardan. Una cuenta guarda tus resultados.