Comparar Ojetos de um ArrayList[resolvido]

4 respostas
j.silvestre

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

douglaskd

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.silvestre

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

douglaskd

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.silvestre

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