Colecciones y Generics
El Java Collections Framework es una biblioteca de estructuras de datos que viene incluida en Java. Cada colección está optimizada para ciertos usos: ArrayList es la más común, accede a elementos por índice en O(1) y es rápida para recorrer; HashMap almacena pares clave-valor con búsqueda y inserción en O(1) promedio; HashSet garantiza que no hay duplicados.
Estas no son simples arrays: crecen dinámicamente, tienen métodos de utilidad (sort, contains, remove) y manejan la memoria por ti.
Los generics (los tipos entre <>) hacen que las colecciones sean type-safe: List<String> solo acepta strings, y el compilador lo verifica. Sin generics tendrías List de Object y necesitarías hacer cast manual en cada acceso, con riesgo de ClassCastException en runtime.
Los generics también permiten escribir tus propias clases y métodos que funcionan con cualquier tipo manteniendo la seguridad de tipos, similar a los generics de TypeScript pero en el contexto Java.
import java.util.*;
// ArrayList - array dinámico
List<String> lenguajes = new ArrayList<>();
lenguajes.add("Java");
lenguajes.add("Python");
lenguajes.add("JavaScript");
lenguajes.remove("Python");
System.out.println(lenguajes.size()); // 2
System.out.println(lenguajes.get(0)); // "Java"
Collections.sort(lenguajes);
// LinkedList - operaciones O(1) en extremos
Deque<String> pila = new LinkedList<>();
pila.push("primero");
pila.push("segundo");
System.out.println(pila.pop()); // "segundo"
// HashMap - clave/valor O(1)
Map<String, Integer> puntos = new HashMap<>();
puntos.put("Ana", 100);
puntos.put("Carlos", 85);
puntos.put("María", 92);
System.out.println(puntos.get("Ana")); // 100
puntos.getOrDefault("Luis", 0);
for (Map.Entry<String, Integer> entrada : puntos.entrySet()) {
System.out.println(entrada.getKey() + ": " + entrada.getValue());
}
// HashSet - sin duplicados
Set<String> visitados = new HashSet<>();
visitados.add("pagina1");
visitados.add("pagina1"); // No se agrega (ya existe)
System.out.println(visitados.size()); // 1
// Generics - type-safe
class Par<K, V> {
private K clave;
private V valor;
public Par(K clave, V valor) {
this.clave = clave;
this.valor = valor;
}
}
Practica esta lección
Resuelve los ejercicios del curso de Java en la app, gratis y con corrección automática.
Empezar a practicar