Oi gente, por favor, pra q usar hashCode() vide abaixo um exemplo pego do meu serviço:
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getIdIdioma() == null) ? 0 : getIdIdioma().hashCode());
return result;
}
A questão é, pra q eu iria querer sobrescrever esse método, e qual seria tal utilidade?
A
andredecotia
Ví q, se a classe sobrescreve equals() ela deve sobrescrever hashCode()… Outra dúvida, vide o equals() sobrescrito, peguei tb do meu serviço:
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Idioma other = (Idioma) obj;
if (getIdIdioma() == null) {
if (other.getIdIdioma() != null)
return false;
} else if (!idIdioma.equals(other.idIdioma))
return false;
return true;
}
Está sobrescrito mas dá a impressão q não estou usando ele… pois dentro da classe q ele está não ninguém o chamando… consigo chamá-lo de outra classe?
evertonsilvagomesjav
hashCode e equals, tem um contrato, se vc quiser saber se dois objetos criados por vc são iguais, então vc tera que sobreescrever esses dois metodos.
Uma maneira bem simples de se explicar, é que “hashCode” é um atalho para essa verificação, ou seja primeiro a JVM vai verificar se os objetos a serem verificados tem os hashs iguais, se forem iguais então ela parte para o método equals, este por sua vez se retornar true, então os objetos são iguais.
rafaelevoinfo
Um bom motivo pra vc querer sobrescrever este método é caso vc queira que alguma classe sua seja uma chave
de alguma coleção Map. Pois, caso vc não sobrescreva o hashcode, vc não irá conseguir encontrar seus dados na coleção.
ViniGodoy
Várias coleções como o HashMap e o HashSet dependem do hashCode corretamente implementado. Ele é uma forma barata de testar se dois objetos são diferentes (mas não se são iguais).