import java.util.HashSet; import java.util.HashMap; import java.util.Map; import java.util.Set;

public boolean contiene(T elemento) return indiceDe(elemento) != -1;

Dedica capítulos exclusivos al análisis de algoritmos para medir su eficiencia y coste en términos de tiempo y memoria.

Antes de construir estructuras, Joyanes siempre insistía en entender la "caja negra" de la memoria. En Java, distinguimos entre:

Arrays (vectores y tablas), cadenas y recursividad.

public void limpiar() for (int i = 0; i < tamaño; i++) elementos[i] = null;

Las tablas hash asocian claves con valores. Utilizan una para transformar una clave en un índice de un array, lo que permite realizar inserciones, eliminaciones y búsquedas en un tiempo promedio teórico de Resolución de Colisiones

sb.append(elementos[tamaño - 1]).append("]"); return sb.toString();

This is a major step up from arrays. Joyanes dedicates significant chapters here.