1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

hashCode() e equals() - porque devo sobrescrever os dois?

Estou estudando a fundo sobre a API Collections do Java, e em relação a implementação HashSet me surgiu uma dúvida em relação ao seu funcionamento interno, por exemplo:

Se eu tenho uma classe Conta com os atributos código, titular e saldo, e eu for colocar as instancias desta classe dentro de um HashSet, para que ele saiba definir se os métodos são iguais, eu devo sobrescrever os métodos hashCode() e equals(), levando em consideração o atributo código, por exemplo.

Agora, porque eu devo sobrescrever o hashCode()? Uma vez que o equals() já não seria o suficiente para definir se o meu objeto é igual ou não a outro que há nesta lista?

Se eu remover o método o hashCode() e deixar só o equals, ele permite que haja repetição no meu HashSet, porque ele não consegue comparar se o objeto já existe, uma vez que está definido o método equals()?

Alguém sabe porque isso acontece?

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java collections hash ou faça a sua própria pergunta.