Duvida Com HashCode

2 respostas
sidney.tavares

Olá Amigos, estou com duvida com este código:

class Carro1{
	int chassi;
	String marca;
	String modelo;
	Carro1(int chassi, String marca, String modelo){
		this.chassi = chassi;
		this.marca = marca;
		this.modelo = modelo;
	}
	public boolean equals (Object o){
		if((o instanceof Carro1)&&((Carro1)o).chassi==this.chassi)
			return true;
		else
			return false;
	}
	public int hashCode(){
		return chassi^marca.length()^13;//como interpretar esta linha?
	}
}
public class TesteEquals1 {
	public static void main(String[] args) {
		Carro1 c1 = new Carro1(123,"GM","Corsa");
		Carro1 c2 = new Carro1(123,"GM","Monza");
		Carro1 c3 = new Carro1(1234,"GM","Corsa");
		System.out.println("hashCode de c1: " + c1.hashCode());
		System.out.println("hashCode de c2: " + c2.hashCode());
		System.out.println("hashCode de c3: " + c3.hashCode());
		System.out.println(c1.equals(c2));
		System.out.println(c2.equals(c3));
	}
	

}

A saída é essa:

hashCode de c1: 116
hashCode de c2: 116
hashCode de c3: 1245
true
false

A minha dúvida é quanto a entender como funciona o hashCode, eu achava que ele servia para verificar se os endereços são os mesmos, neste código eu entendi que ele faz uma comparação pelo chassi, o método equals retorna true, e entendi também que quando o equals retorna true o metodo hashCode tem que retornar true também, mas to confuso com a saída e também com a linha que comentei, obrigado desde já pela ajuda.

2 Respostas

Flavio_machine

O código de hashing é para otimizar a busca em grandes comjuntos de objetos tipo em Hashset, Hashmap que usam o código de hashing para dizer onde o objeto vai ser armazenado no conjunto, quando vc precisar fazer uma pesquisa nesse conjunto se o hashCode estiver implementado corretamente o pesquisa vai ser mais rápida.
Existem condireções para um bom funcionamento se dois objetos forem iguais utilizando equals o sei código de hashind devem ser iguais.
Flw

pmlm

Neste caso a implementação de equals / hashCode não está correcta, uma vez que equals apenas compara o campo chassi, mas o equals usa os campos chassi e marca.

Criado 2 de outubro de 2010
Ultima resposta 4 de out. de 2010
Respostas 2
Participantes 3