Implementação interna de java.util.HashMap e HashSet
Eu tenho tentado entender a implementação interna dejava.util.HashMap
ejava.util.HashSet
.
A seguir estão as dúvidas surgindo em minha mente por um tempo:
Qual é a importância do@Override public int hashcode()
em um HashMap / HashSet? Onde esse código hash é usado internamente?Eu geralmente vi a chave do HashMap ser umString
gostarmyMap<String,Object>
. Posso mapear os valores contrasomeObject
(em vez de String) comomyMap<someObject, Object>
? Quais contratos eu preciso obedecer para que isso aconteça com sucesso?Desde já, obrigado !
EDITAR:
Estamos dizendo que o código hash da chave (cheque!) É a coisa real contra a qual o valor é mapeado na tabela de hash? E quando fazemosmyMap.get(someKey);
java está chamando internamentesomeKey.hashCode()
fazer com que o número na tabela de hash seja procurado pelo valor resultante?Responda: Sim.
EDIT 2:
Em umjava.util.HashSet
, de onde é a chave gerada para a tabela de hash? É do objeto que estamos adicionando, por exemplo.mySet.add(myObject);
entãomyObject.hashCode()
vai decidir onde isso é colocado na tabela de hash? (como não damos chaves em um HashSet).Responda: O objeto adicionado se torna a chave. O valor é manequim!