Metodo equals HashSet

1 resposta
cu_ringa

pessoal fiz uma classe Cavalo onde sobrescrevo os metodos equals e hashCode. Sendo q quando rodo a classe Main4 o resultado n é o q eu espero. alguem tem ideia do q tou fznd errado?

Classe Cavalo

public class Cavalo {
	
	private String nome;

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public boolean equals(Object ob){
		
		if(ob != null && this.getClass() == ob.getClass()){
			Cavalo c = (Cavalo)ob;
			System.out.println(c.getNome());
			return this.nome.equals(c.getNome());
		}
		return false;		
	}
	
	public int hashCode(){
		int i = this.nome.hashCode();
		System.out.println(i);
		return i;
	}
}

Classe Main4

public class Main4 {

	public Main4(){
	
		Set<Cavalo> s = new HashSet<Cavalo>();
		
		Cavalo c1 =  new Cavalo();
		c1.setNome("rouxao");
		
		Cavalo c2 =  new Cavalo();
		c2.setNome("lourinho");
		
		Cavalo c3 =  new Cavalo();
		c3.setNome("lourinho");
				
		s.add(c1);
		s.add(c2);
		//s.add(c1);
		s.add(c3);
		
		for(Cavalo c : s){
			System.out.println(c.getNome());
		}		
		
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Main4();
	}

}

Saída

-925129266
-[telefone removido]
-[telefone removido]
lourinho
lourinho
rouxao

Pelo q sei o HashSet não adciona objetos repetidos, então o pq desse resultado?

1 Resposta

bombbr

cu_ringa:

Pelo q sei o HashSet não adciona objetos repetidos, então o pq desse resultado?

Realmente não adciona objetos repetidos e nem esta adicionando no código que vc postou.
O “problema” esta no println dentro do equals…

Falow…

Criado 23 de novembro de 2006
Ultima resposta 24 de nov. de 2006
Respostas 1
Participantes 2