Inicio > Cursos > Java > Colecciones y Generics
JavaProgramación Orientada a ObjetosLección 6 de 15

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;
    }
}
Consejo⚡ Regla general: ArrayList para acceso por índice, LinkedList para inserción/eliminación frecuente, HashMap para búsqueda por clave.
← Herencia, Interfaces y PolimorfismoStrings en Profundidad →

Practica esta lección

Resuelve los ejercicios del curso de Java en la app, gratis y con corrección automática.

Empezar a practicar