importjava.util.*;/** Esta classe não redefine equals */classCliente{privateStringnome;publicCliente(Stringnome){this.nome=nome;}}/** Esta classe redefine equals */classEmpresa{privateStringnome;publicEmpresa(Stringnome){this.nome=nome;}publicbooleanequals(Objectobj){if(obj==null)returnfalse;if(obj.getClass()!=this.getClass())returnfalse;returnthis.nome.equalsIgnoreCase(nome);}}classExemploEquals{publicstaticvoidmain(String[]args){ExemploEqualse=newExemploEquals();e.teste1();e.teste2();}// Teste com a classe Cliente, que não redefine equalspublicvoidteste1(){List<Cliente>clientes=newArrayList<Cliente>();clientes.add(newCliente("João"));clientes.add(newCliente("Maria"));if(clientes.contains(newCliente("Maria"))){System.out.println("Achei 'Maria' na lista de clientes");}else{System.out.println("Não achei 'Maria' na lista de clientes");}}// Teste com a classe Empresa, que redefine equalspublicvoidteste2(){List<Empresa>empresas=newArrayList<Empresa>();empresas.add(newEmpresa("Sun"));empresas.add(newEmpresa("Microsoft"));if(empresas.contains(newEmpresa("Sun"))){System.out.println("Achei 'Sun' na lista de empresas");}else{System.out.println("Não achei 'Sun' na lista de empresas");}}}
Eu tenho testado a inclusão de varios objetos iguais, mas este teste nao esta funcionando. alguem sabe por que?
concerteza o problema está na incorreta implementaçao de equals, mas um outro problema no seu codigo é fazer esse if antes. Se vc não quer ter itens repetidos use um Set e não um List. E não me diga que usa List para fazer get(index)…
Andre_Brito
Acho que estou com o mesmo problema :oops: :oops: :oops: :oops: :oops: :oops:
importjava.util.*;publicclassLista{List<Cliente>clientes=newArrayList<Cliente>();publicLista(){}publicvoidadiciona(ClientenovoCliente){if(clientes.contains(novoCliente))System.out.println("Nao foi possivel inserir o cliente (ja existe)");elseclientes.add(novoCliente);}publicstaticvoidmain(String[]args){Stringnome;do{Listalista=newLista();Scanners=newScanner(System.in);System.out.print("Digite o nome do novo cliente: ");nome=s.next();if(nome.equals("lista")){for(Clientec:clientes)System.out.println(""+c.toString());}else{Clientec=newCliente(nome);lista.adiciona(c);}}while(!nome.equals(""));}}
Eu quero fazer a mesma coisa que você (depois de ler seu tópico quis ver isso)…
Só que, não entendi o porquê de eu ter que implementar um .equals se já existe um contains…
O código não compila por causa do for each, mas não sei o porquê.
Abraços…
Ps.: minha identação está legal ou deve ser melhorada?
nbluis
O método contains percorre todos os elementos da lista e invoka o método equals do seu objeto para verificar se é igual ou não.