Não entendi, se tem 3 contas e 2 são diferentes. Não entendi porque o meu resultado deu 1.
Não entendi, se tem 3 contas e 2 são diferentes. Não entendi porque o meu resultado deu 1.
Oi Jessica.
Pode ser mais específica com a sua dúvida? Se puder postar o exercício aqui também...
O resultado da questão é:
public class TestaHashSetDeConta {
public static void main(String[] args) {
HashSet<Conta> contas = new HashSet<Conta>();
ContaCorrente c1 = new ContaCorrente(123, "Mauricio");
ContaCorrente c2 = new ContaCorrente(123, "Adriano");
ContaCorrente c3 = new ContaCorrente(444, "Luiz");
contas.add(c1);
contas.add(c2);
contas.add(c3);
System.out.println("Total de contas no HashSet: " + contas.size());
}
Porém, não entendi porque o retorno é 1.
Oi Jessica.
O HashSet<>, diferentemente do ArrayList<>, não permite elementos duplicados na lista. Entretanto, no caso dos seus objetos c1, c2 e c3, eles são objetos diferentes, logo se todos forem adicionados ao HashSet<>, o tamanho do mesmo deve ser 3. Veja queas suas referências são distintas, apontam para objetos diferentes.
A referencia compara o nome do cliente, ou seja, o resultado está dando incorreto. Classe conta.
public class Conta implements Comparable<Conta> {
protected int numero;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + numero;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Conta other = (Conta) obj;
if (numero != other.numero)
return false;
return true;
}
private String nomeDoCliente;
public void setNumero(int numero) {
this.numero = numero;
}
public int getNumero() {
return numero;
}
public int compareTo(Conta outra) {
// return this.getNumero() - outra.getNumero();
return this.nomeDoCliente.compareTo(outra.nomeDoCliente);
}
public String getNomeDoCliente() {
return nomeDoCliente;
}
public void setNomeDoCliente(String nomeDoCliente) {
this.nomeDoCliente = nomeDoCliente;
}
}
Olhando o seu @Override no método hashCode() notamos o motivo dos dois primeiros objetos serem considerados iguais, pois ele retorna o mesmo inteiro, uma vez que usa a variável número e nesses dois objetos essa variável tem o mesmo valor. Agora, o terceiro objeto não faz sentido ser considerado igual. Esse resultado deveria ser 2. Ou tem mais algo no seu código, ou estamos comendo bola...
O unico código que falta seria o da conta corrente. É esse.
public class ContaCorrente extends Conta {
private double saldo;
private String nome;
private int numeroDaConta;
public ContaCorrente (int numero,String nome ){
this.numeroDaConta = numero;
this.nome = nome;
}
public void deposita(double d) {
setSaldo(getSaldo() + d);
}
public double getSaldo() {
return saldo;
}
public void setSaldo(double saldo) {
this.saldo = saldo;
}
}