ArrayList duvidas

4 respostas
Umbriel

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

4 Respostas

marcos4ft

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

Danilo_Carvalho

Umbriel tudo bom!!!

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");  
        }
    }
rmendes08

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.

Umbriel

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.

Valew pelo esclarecimento rmendes08 =)

Criado 24 de fevereiro de 2012
Ultima resposta 24 de fev. de 2012
Respostas 4
Participantes 4