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!

Respuestas a la pregunta(9)

Su respuesta a la pregunta