Colecciones en Java: List, Set, Map y Comparator
ArrayList, LinkedList, HashMap, HashSet y cómo ordenar con Comparator, con laboratorios donde añades, buscas y ordenas elementos en vivo.
Un array tiene tamaño fijo. Las colecciones del paquete java.util crecen y
encogen solas y traen métodos para buscar, ordenar y recorrer. Las tres familias:
List (orden, permite repetidos), Set (sin repetidos) y
Map (pares clave→valor).
ArrayList: la lista que más usarás
List<String> frutas = new ArrayList<>();
frutas.add("manzana");
frutas.add("pera");
frutas.get(0); // "manzana"
frutas.size(); // 2
frutas.remove("pera");
frutas.contains("uva"); // false
ArrayList vs LinkedList
Ambas implementan List. La diferencia está en cómo guardan los datos por dentro y, por tanto, en qué operaciones son rápidas.
| Operación | ArrayList | LinkedList |
|---|---|---|
get(i) (acceso por índice) | ⚡ Rápido O(1) | 🐢 Lento O(n) |
add() al final | ⚡ Rápido (amortizado) | ⚡ Rápido O(1) |
| Insertar/borrar por el principio o el medio | 🐢 Lento (mueve elementos) | ⚡ Rápido si ya estás ahí |
| Memoria | Menos | Más (guarda punteros) |
ArrayList salvo que hagas
muchísimas inserciones/borrados al principio de la lista.HashMap: pares clave → valor
Map<String, Integer> edades = new HashMap<>();
edades.put("Ana", 30);
edades.put("Luis", 25);
edades.get("Ana"); // 30
edades.getOrDefault("Eva", 0); // 0
edades.containsKey("Luis"); // true
HashSet: sin duplicados
Un Set ignora los elementos repetidos. Truco habitual para quitar duplicados de una lista.
Ordenar con Comparator
Collections.sort(lista) usa el orden «natural» (Comparable). Para otro criterio
le pasas un Comparator: lista.sort(Comparator.comparing(Persona::getEdad)).
Comprueba lo aprendido
"rojo", "azul" y otra vez "rojo" a un HashSet. ¿size()?get(500)?map.getOrDefault("x", 0) devuelve…