Implementación interna de java.util.HashMap y HashSet
He estado tratando de entender la implementación interna dejava.util.HashMap
yjava.util.HashSet
.
Las siguientes son las dudas que aparecen en mi mente por un tiempo:
¿Cuál es la importancia de la@Override public int hashcode()
en un HashMap / HashSet? ¿Dónde se usa este código hash internamente?En general he visto la clave del HashMap ser unString
me gustamyMap<String,Object>
. ¿Puedo mapear los valores en contra?someObject
(en lugar de String) comomyMap<someObject, Object>
? ¿Qué todos los contratos debo obedecer para que esto suceda con éxito?Gracias por adelantado !
EDITAR:
¿Estamos diciendo que el código hash de la clave (verifique) es la cosa real contra la cual se asigna el valor en la tabla hash? Y cuando lo hacemosmyMap.get(someKey);
java está llamando internamentesomeKey.hashCode()
para obtener el número en la tabla Hash para buscar el valor resultante?Responder: Sí.
EDIT 2:
en unjava.util.HashSet
, ¿desde dónde se genera la clave para la tabla Hash? Es del objeto que estamos agregando por ejemplo.mySet.add(myObject);
entoncesmyObject.hashCode()
va a decidir dónde se coloca esto en la tabla hash? (como no damos claves en un HashSet).Responder: El objeto añadido se convierte en la clave. El valor es ficticio!