Usando primary key como hashCode

3 respostas
rodrigo.bossini

Tenho algumas tabelas no banco para as quais criei classes na aplicação.

Por exemplo, a tabela cliente, no banco possui os campos idCliente e nomeCliente.

Criei uma classe cliente com as variáveis de instância id e nome.

Precisarei armazenar um conjunto de cliente e pretendo utilizar hashCode.

Logo precisarei implementar equals e hashCode na classe Cliente.

Atualmente, meu método equals retorna true se o id for igual.

Meu método hashCode simplesmente retorna o id.

O contrato entre equals e hashCode está mantido.

E essa me parece uma boa estratégia. Pois objetos diferentes sempre estarão em “baldes” diferentes dentro do HashSet.

Pelo que entendo do HashSet, o ideal é que os objetos fiquem o mais espalhados possíveis, certo?

Ou tem alguma outra estratégia que pode otimizar isto?

Valeu!

3 Respostas

Marky.Vasconcelos

Lembre-se que mesmo dois objetos com ids iguais podem ser diferentes se carregados duas vezes e alterados separadamente.

Mas a do hashcode faço exatamente igual.

gomesrod

O que deve ser considerado é o seguinte: Comparar os IDs é suficiente para estabelecer a igualdade entre os objetos? Isso faz sentido dentro do domínio que você está trabalhando ou foi feito só por economia de código?

Se a comparação apenas de ID for realmente o melhor a se fazer (e não o mais fácil, cuidado hein :slight_smile: ), deixe desse jeito mesmo, está ótimo.
Senão, deve-se incluir os demais atributos na comparação do equals() e alterar o hashCode() para continuar respeitando o contrato.

rodrigo.bossini

Mark_Ameba:
Lembre-se que mesmo dois objetos com ids iguais podem ser diferentes se carregados duas vezes e alterados separadamente.

Mas a do hashcode faço exatamente igual.

A ideia do campo id na classe cliente é a mesma que o campo idCliente na tabela cliente: uma vez setado, não será mais alterado. Aliás só não marco o campo como final porque na hora de realizar a query não poderia setar o seu valor adequadamente.

Outra coisa. Se usar outras variáveis no equals é recomendável que as mesmas sejam usadas no hashCode.

Criado 19 de fevereiro de 2010
Ultima resposta 19 de fev. de 2010
Respostas 3
Participantes 3