Hahscode serve para compara diferenca…
equals serve pra comparar igualdade…
deixa eu explicar melhor… Hash é assim… 2 objetos com hashcode diferente, por definição são diferentes… o inverso não é verdade… 2 objetos com mesmo hashcode não são necessariamente iguais… o hash usa int é feito pra ser rapido e é usado por diversas coisas em java para otimizar buscas… se vc não implementa corretamente hashCode, as primeiras coisas a falhar são as Collections… os métodos contains, remove, removeAll, retainsAll … entre outros, certamente vão falhar, se o hashCode não for bem implementado… pois 2 hashcode diferentes, vai fazer a collection nem testar a igualdade
equals serve para compara igualdade entre objetos… se 2 objetos são iguais, então equals deve voltar true…
…
Pq usar ?? por exemplo…
[code]public class Pessoa {
String nome;
String cpf;
Pessoa(String nome,String cpf) {
this.nome = nome;
this.cpf = cpf;
}
//…[/code]
como java vai saber ?? quando duas pessoas são iguais para o seu aplicativo ?? ele so vai saber c vc implementar equals…
no seu equals o coerente nesse caso é vc testar c os CPFs das duas pessoas são iguais…
o hashCode como vc vai usar o CPF como padrão vc pode simplismente importar o hashCode do cpf, que tudo fica certo… assim seria + ou menos assim
[code]//…
public int hashCode() {
int hash = 0;
hash = hash + (cpf == null) ? 0 : cpf.hashCode();
return hash;
}
public equals(Object o) {
if (!(o instanceof Pessoa))
return false;
Pessoa other = (Pessoa)o;
if ((this.cpf == null && other.cpf != null) || !cpf.equals(other.cpf) )
return false;
if (this.cpf == null && nome != null)
reutrn nome.equals(other.nome);
return true;
}
}[/code]
ou seja… quando os CPF são nulos o hashCode são zero, mais isso não quer dizer que os objetos são iguais, posi os nomes podem ser diferentes…
quando há CPF o hashCode pode denunciar rapidinho que os objetos são diferentes… sem muitos testes… é pra isso que ele serve…
o equals… faz os seguintes testes…
Se o objeto é uma Pessoa
Se os Cpf são iguais, caso exista CPF em pelomenos 1 deles…
Se os nomes são iguais, caso não haja cpf…