Se a minha classe tem um contrato com a interface java.io.Serializable
e eu gerar um serialVersionUID
automaticamente cada classe. Eu posso usar esse serial gerado como meu hashCode? É uma boa prática?
Se a minha classe tem um contrato com a interface java.io.Serializable
e eu gerar um serialVersionUID
automaticamente cada classe. Eu posso usar esse serial gerado como meu hashCode? É uma boa prática?
Oi Icaro, tudo bem?
Se você pega o número do serialVersionUID
e apenas retornar como número do hashCode()
, todos os seus objetos terão o mesmo número de hashCode
, e isso faz com que todos os objetos acabem ficando na mesma "gaveta".
Pensando na busca, isso seria ruim pelo fato de como todos os objetos estão na mesma gaveta (já que possuem o mesmo valor de hashCode() ), ele vai ter que olhar todos os elementos no pior do caso.
Por isso normalmente, você faz algum calculo dinamico no hashCode()
, baseado nos valores dos atributos por exemplo. Desta forma haverá espalhamento e poucos itens por gaveta. Assim quando você procurar em uma gaveta especifica, não terá que olhar todos os elementos da coleção.
A IDE consegue te ajudar nisso. No Eclipse por exemplo, é só utilizar o atalho "Ctrl + 3" e digita generate"equals and hashCode" na busca.
Espero ter ajudado. Abraço!
Valeu Lucas! Realmente n tinha pensado nesse cenário :)