Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

HashCode

Boa tarde a todos!

dúvida: "se você reescrever o equals precisará reescrever o hashcode", se aplica somente as classes que implementam a interface Set ?

Pergunto isso, pois foi demonstrado na aula que o equals do ArrayList funcionou não sendo necessário sobrescrever o método hashcode.

Desde já agradeço!

2 respostas
solução!

Boa noite Alex!

Não, o equals e o hashcode se aplica a outras coleções. Vou tentar explicar de uma forma resumida e clara o equals e o hashcode.

Imagina que temos uma lista de produtos List produtos = new ArrayList<>() e nessa lista temos um notebook. Para verificar se nessa lista contém mesmo esse produto, o notebook, fazemos produtos.contains(produto), porém vamos supor que o método equals não está sobrescrito na classe Produto, o método contains() irá retornar false. Para "ensinar" a classe Produto a comparar dois objetos pelo nome, precisamos sobrescrever o método equals() e o próprio eclipse ajuda nessa implementação, você seleciona os atributos que deseja considerar produtos iguais (nome, numero de serie, cor, etc). Com isso, ao executar novamente o método contains() irá retornar true.

O hashcode serve como uma "forma" de o Java organizar e agrupar os objetos da lista com a intenção de localizar mais rápido um determinado objeto. Por exemplo, na classe Produto implementando o hashCode imagina que o Java organiza os produtos em caixas separadas com a letra inicial de cada produto, então conforme você vai adicionando produtos na lista, automaticamente o Java vai organizando esse produtos nas caixas, aí quando você precisar fazer uma busca de um produto nessa lista exemplo: Papel, o Java já sabe exatamente em qual caixa ele deve ir buscar, na caixa P e depois irá comparar todos os Produtos que iniciam com a letra P usando o equals para ter certeza que é o que você pediu para ele encontrar, com isso a busca é muito mais rápida.

Por isso sempre é falado que devemos implementar o equals e o hashcode, pois ambos são usados em conjunto quando usamos coleções.

Espero que não tenha ficado confuso a explicação e tenha ajudado! Abraço.

Agradeço a explicação Gabriel! Um abraço!