← SEARCHABLE ARCHIVE
Java · 2026-07-30

Java de los fundamentos al dominio — Lección 5

Elegir genéricos y colecciones que se ajusten a su propósito

INTERACTIVE READING MODE →

Los artículos escritos en este blog fueron creados con el objetivo de enseñar. Además, la información del artículo puede ser incorrecta, así que tenga cuidado.

Las colecciones de Java almacenan una variedad de datos, pero cada estructura de datos hace cosas diferentes. Si usa genéricos juntos, puede verificar si hay errores de tipo al compilar sin tener que convertir el valor recuperado cada vez.

List, Set, Map

List<String> party = new ArrayList<>();
Set<Integer> unlockedIds = new HashSet<>();
Map<Integer, Item> itemById = new HashMap<>();

party.add("Rose");
unlockedIds.add(10);
itemById.put(10, new Item(10, "Potion"));

Lista permite orden y duplicación, y Conjunto se ocupa de la presencia o ausencia de valores no duplicados. El mapa encuentra valores a través de claves.

El orden de HashMap no está garantizado. Si la ordenación o el orden de entrada es un contrato, debe elegir una implementación que se adapte a ese propósito.

Busca de forma segura

Item item = itemById.get(10);
if (item != null) {
    System.out.println(item.getName());
}

get devuelve nulo si la clave no existe. Evitar diseños que almacenen el valor nulo como valor evita la confusión entre Ninguno y el valor nulo.

clase genérica

public final class Registry<T extends Identifiable> {
    private final Map<Integer, T> values = new HashMap<>();

    public void add(T value) {
        values.put(value.getId(), value);
    }

    public Optional<T> find(int id) {
        return Optional.ofNullable(values.get(id));
    }
}

T extends Identifiable es una restricción de que el tipo a almacenar debe proporcionar un ID. Registry<Item> y Registry<Monster> reutilizan las mismas reglas, pero los valores no se mezclan.

Confíe en interfaces en lugar de implementaciones

Si configura los tipos de campo y parámetros en una interfaz de Lista o Mapa, solo las operaciones necesarias permanecen en el contrato. Sin embargo, si las características de rendimiento son importantes, también debe saber si la implementación real es ArrayList o LinkedList.

La selección de la colección no es sólo una cuestión de cantidad de datos. Primero se debe determinar el propósito del uso, como el orden, la duplicación, la clave de búsqueda y la frecuencia del cambio.