Comparar Ojetos de um ArrayList[resolvido]

4 respostas
J

Senhores estou com problemas ao compara objetos de um arrayList.

if (arrayBitsContainer.size() >= 4) {
			if (getBitsContainer(0).equals(getBitsContainer(2))) {

				System.out.println(" os dois são iguais");

			 else

				System.out.println(" os dois são diferentes");

		}

O conteudo deles são IGUAIS , porém foram criados em momentos diferentes, só que com o código acima o resultado é que são diferentes, li em alguns posts que tem que sobreescrever o metodo equals… mas não entendi direito…

sds

j.silvestre

4 Respostas

D

todos os objetos possuem o equals, ele compara a referência do objeto,

então se eu fizer:

Aluno a = new Aluno("João");

Aluno b = a;

if(b.quals(a)) // vai dar que é a mesma referência.

quando você quer comparar se possuem o mesmo conteúdo você deve sobrescrever o método e dizer o que comparar...

class BitsContainer{

private int algumNumero; //id por exemplo
private String algumTexto;

@override
public boolean equals(BitsContainer b){

if(this.algumNumero == b.algumNumero) {
    return true;
}
return false;
}

}

no exemplo acima sobrescrevi o método da classe BitsContainer...assim quando eu fizer:

if(getBitsContainer(0).equals(getBitsContainer(2)) // ele vai me retornar True se a variavel algumNumero for igual.

J

douglaskd

Valew funcionou fiz como vc disse criei um id.

Agora apenas por curiosidade se quiser comparar todas as variaveis de instancia teria que fazer assim comparar uma a uma ?

class BitsContainer{  
      
    private int algumNumero; //id por exemplo  
    private String algumTexto;  
      
    @override  
    public boolean equals(BitsContainer b){  
      
    if((this.algumNumero == b.algumNumero) && ( this algumTexto == b.algumTexto)) {  
        return true;  
    }  
    return false;  
    }  
      
    }

sds

j.silvestre

D

ai você teria que usar reflection descobrir os atributos de um e compara-lo com o outro objeto (mas e a performance ?)

eu desconheço que exista algo pronto…

eu faria assim para comparar vários atributos:

return this.algumNumero == b.algumNumero && this.algumTexto.equals(b.algumTexto) && this.algumTexto.equals(b.algumTexto);

J

blz…

reflection para mim ainda é um desconhecido… he…he…

mas valew…

sds

j.silvestre

Criado 6 de agosto de 2013
Ultima resposta 6 de ago. de 2013
Respostas 4
Participantes 2