ae pessoal como faria para o codigo abaixo retorna o mesmo codigo hashing? fiquei nessa duvida na implementacao da sintaxe… com int é facil mais com String nao conseguir meu equals nesse caso eh true mis os codigos hashing sao diferente…
public class Difhas {
String nome;
Difhas(String name){
nome=name;
}
public boolean equals(Object o){
if((o instanceof Difhas)&&(((Difhas)o).nome==this.nome)){
return true;
}else{return false;}
}
public static void main(String[] args) {
Difhas d = new Difhas("cam");
Difhas d1 = new Difhas("cam");
System.out.println(d.equals(d1));
System.out.println(d.hashCode());
System.out.println(d1.hashCode());
}
}
public class Difhas {
String nome;
Difhas(String name){
nome=name;
}
public boolean equals(Object o){
if((o instanceof Difhas)&&(((Difhas)o).nome==this.nome)){
return true;
}else{return false;}
}
public int hashCode(){
return nome.hashCode();
}
public static void main(String[] args) {
Difhas d = new Difhas("cam");
Difhas d1 = new Difhas("cam");
System.out.println(d.equals(d1));
System.out.println(d.hashCode());
System.out.println(d1.hashCode());
}
}
mas assim, vamos dizer que tenho “cam” e “mac” como faria para ele retornar o mesmo hashing sendo que q cam e mac saos usam as mesma letras entao o hashing deveria ser igual…
public class Difhas {
String nome;
Difhas(String name){
nome=name;
}
public boolean equals(Object o){
if((o instanceof Difhas)&&(((Difhas)o).nome==this.nome)){
return true;
}else{return false;}
}
public static void main(String[] args) {
Difhas d = new Difhas("cam");
Difhas d1 = new Difhas("mac");
System.out.println(d.equals(d1));
System.out.println(d.hashCode());
System.out.println(d1.hashCode());
}
}
mudei o valor do contrutor e nao implementei o metodo hashCode mais queria saber na implementacao como faria para que o hashing fosse igual mesmo que os valores sao diferente mas usam as mesmas letras…
mas assim, vamos dizer que tenho “cam” e “mac” como faria para ele retornar o mesmo hashing sendo que q cam e mac saos usam as mesma letras entao o hashing deveria ser igual…[/quote]
Não necessariamente…devemos ter em mente o seguinte:
se o método obj1.equals(obj2) == true
então
obj1.hashCode() == obj2.hashCode()
Porém se obj1.equals(obj2) == false
então
obj1.hashCode() == obj2.hashCode() OU
obj1.hashCode() != obj2.hashCode()
dependendo da implementação o hash.
[quote=camilolopes]
mudei o valor do contrutor e nao implementei o metodo hashCode mais queria saber na implementacao como faria para que o hashing fosse igual mesmo que os valores sao diferente mas usam as mesmas letras…[/quote]
Para isto vc teria algo como:
public int hashCode(){
return (nome.charAt(0) + nome.charAt(1) + nome.charAt(2));
}
Note que esta é uma péssima implementação de hash.
Assim como a implementação abaixo, tbém seria válida porém ineficiente
hum entao assim posso ter hascode == e objetos != e ter objetos == e hascode ==, OU ter hashcode != com objetos == ?
tudo depende se eu implementar o metodo hashCode ou nao… se deixar para a jvm ele nunca sera igual a n ser que seja uma String ou um objeto da class Wrapper:Double, Integer?
hum entao vou ver a essencia disso quando mexer com framework? pq eu vejo a galera sempre usando o equals() mais pouco implementa o hashCode… sendo que ali o equals eh true mas o hashing diferentes…