Desarrollador Java: pregunta de entrevista
¿Cómo funciona HashMap de Java internamente?
HashMap transforma la clave en un bucket, resuelve colisiones con lista o árbol y redimensiona al superar el umbral de carga; equals y hashCode correctos son obligatorios.
Respuesta directa
Qué debe cubrir una buena respuesta
Cómo funciona
HashMap guarda entradas en un array de buckets indexado por una dispersión del hashCode de la clave. Las claves del mismo bucket forman una lista enlazada, que desde Java 8 se convierte en árbol rojo-negro cuando supera ocho entradas, manteniendo la búsqueda en el peor caso logarítmica en vez de lineal. Cuando el número de entradas supera la capacidad por el factor de carga 0,75, la tabla se duplica y cada entrada se reubica. get y put son de tiempo constante en promedio solo si hashCode distribuye bien y equals es coherente con él.
Ejemplo
Usar un objeto mutable como clave y cambiar un campo tras insertarlo mueve su hash pero no su bucket, así que map.get devuelve null para una clave que sigue dentro del map. Dimensionar el map con new HashMap<>(expected * 4 / 3 + 1) antes de cargar 100.000 entradas evita varios rehash durante la carga masiva.
Errores frecuentes
- Sobrescribir equals sin hashCode, de modo que claves iguales caen en buckets distintos.
- Esperar un orden de iteración estable o de inserción, que ofrece LinkedHashMap y no HashMap.
- Compartir un HashMap entre hilos sin sincronización y corromperlo durante un resize.
Una estructura útil para responder
Responde desde tu propia experiencia.
No memorices un guion: usa solo ejemplos que puedas explicar con honestidad en preguntas posteriores.
Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.