Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Mesmo sem o hashCode, inserindo mesmo objeto a lista não armazena?

Sem utilizar o hashcode na classe Conta do exercício, quando adiciono o mesmo objeto conta duas vezes no HashSet, o objeto não esta sendo incluso, porque? Lembrando que quando adiciono outro objeto Conta, mesmo tendo o mesmo conteúdo nos atributos, ele aceita a duplicidade.

Segue o código:

package br.com.empresa.banco.conta;

import java.util.HashSet;

public class TestaHashCode {

    public static void main(String[] args) {
        HashSet<Conta> contas = new HashSet<Conta>();

        Conta c1 = new ContaPoupanca(1000, 120,"Arcio");
        Conta c2 = new ContaPoupanca(2000, 190,"Barcio");
        Conta c3 = new ContaPoupanca(3000, 230,"Darcio");
        Conta c4 = new ContaPoupanca(4000, 250,"Zarcio");
        Conta c5 = new ContaPoupanca(5000, 300,"Jarcio");
        Conta c6 = new ContaPoupanca(6000, 990,"Carcio");
        Conta c7 = new ContaPoupanca(1000, 120,"Arcio");
        Conta c8 = new ContaPoupanca(3000, 120,"Eita1");

        contas.add(c1);
        contas.add(c2);
        contas.add(c3);
        contas.add(c4);
        contas.add(c5);
        contas.add(c6);
        contas.add(c7); //adicionando outro objeto com mesmo conteudo de c1 - inclui normlmente sem hashcode na classe conta
        contas.add(c8);
        contas.add(c1); //adicionando o mesmo objeto novamente - nao inclui mesmo sem hashcode em na classe conta

        for (Conta conta : contas) {
            System.out.println(conta.getNome());
        }
    }

}
1 resposta
solução!

Olá Marcio,

No caso da referência c7 ele permite inserir porque como vc mesmo disse foi removido a implementação do hash, fazendo com que eles acabem tendo hash diferentes então ele entende que são diferentes. Quanto a referência c1 , está referenciando ao mesmo objeto, que por sua vez tem o mesmo valor de hash do primeiro que foi inserido, exatamente o mesmo objeto. Só lembrando, sempre que sobescrever o ```equals```` sobrescreva tb o hash, isso é regra Espero ter ajudado :)