E ae galera, tudo beleza?? Estava aqui implementando uma Agenda pra treinar mesmo, fixar algumas coisas, usei Arrays comuns pra faze-la. Entao decidi reescrever o codigo usando metodos mais modernos, e escolhi a ArrayList pra isto.
Logo no começo me deparei com um probleminha.
//Adiciona Registros
public void addRegistro(String n, String t, String e, String e2) {
Registro temp = new Registro(n, t, e, e2);
if(this.registros.contains(temp)) {
System.out.println("Registro Existente!");
}
this.registros.add(temp);
System.out.println("Registro Adicionado com Sucesso");
}
O problema é o seguinte: Parece nao estar funcionando a comparacao pra ver se o registro ja esta presente. Estou deixando passar algo? Sou iniciante ainda, entao me perco nessas coisas simples.
Obrigado pela atençao
Nesse caso não vai retorna true, pq vc acabou de instanciar o Registro Temp.
Se não me engano,o contains utiliza o método equals pra verificar se o objeto está na lista.
Se sua classe Registro possui um identificador unico, vc pode sobrescrever o método equals
O estranho no seu código é que mesmo testando dentro de um if você deixa o registro ser adicionado no ArrayList, coloca um else!
//Adiciona Registros
public void addRegistro(String n, String t, String e, String e2) {
Registro temp = new Registro(n, t, e, e2);
if(this.registros.contains(temp)) {
System.out.println("Registro Existente!");
} else {
this.registros.add(temp);
System.out.println("Registro Adicionado com Sucesso");
}
}
Pesquise sobre os métodos equals e hashCode. O método contains do ArrayList e de outras coleções usam o método equals para saber se dois objetos são iguais ou não. Acontece que a implementação padrão do método equals utiliza o operador == para comparar dois objetos, de forma que por padrão, dois objetos são iguais se e somente se eles são o mesmo objeto. Para alterar esse comportamento você precisa sobrescrever o método equals para você fornecer seu próprio critério de igualdade. Se você estiver usando Eclipse ou NetBeans você pode usar a geração de código para gerar esses métodos.
Entao, o operados == vai me dizer se a referencia é a mesma né, e oque eu estou querendo saber no codigo, é se o conteudo é o mesmo. Acredito que seja essa a ideia. Entao, experimentei gerar os overrides pelo Eclipse nas variaveis da classe Registro e funcionou direitinho. Agora preciso ler pra saber como o procedimento é feito, e aprender a fazer ele na mao pra fins de gravar o conceito mesmo hehehehe, nada pior do que se tornar um no brainer.