1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[java] arraylist e indexof

Discussão em 'Programação' iniciada por metralha761, 15 de Junho de 2009. (Respostas: 6; Visualizações: 1783)

  1. metralha761

    metralha761 1st Folding then Sex

    Boas, ando aqui a tentar resolver um problema com arraylist.

    Vejam este codigo

    Código:
    import java.util.ArrayList;
    
    
    public class teste {
        public static void main(String[] args) {
            ArrayList<Testar> coisa = new ArrayList<Testar>();
            int a=2;
            coisa.add(new Testar(a));
            coisa.add(new Testar(++a));
            System.out.println(coisa.indexOf(new Testar(3)));
         }
    }
    
    class Testar{
        int a;
        Testar(){
        }
        Testar(int b){
            a=b;
        }
    }
    Isto faz retornar -1, como faço para o indexOf percorrer a lista?

    Isto sem fazer o percurso manualmente.
     
  2. AliFromCairo

    AliFromCairo Power Member

    Isso não é um problema. Estás a criar um novo objecto e a verificar se este existe na lista o que, como é óbvio, não acontece. Se pretendes comparar pelo conteúdo do objecto, então podes redefinir o método equals ou fazer um ciclo, i.e., percorrer a lista.
     
  3. metralha761

    metralha761 1st Folding then Sex

    Segundo leio no javadoc, tenho de inserir um objecto, ainda não descobri qual é.

    O meu objectivo é que o indexOf que procure o que quero. Não queria estar a percorrer a lista.
     
  4. AliFromCairo

    AliFromCairo Power Member

    Se pretendes obter o objecto criado no statement anterior (new Testar(a++)), precisas de guardar este numa variável local, para em seguida utilizar o indexOf. Algo do género:

    Código:
    Testar t = new Testar(a++);
    System.out.println(coisa.indexOf(t));
    
    Neste caso, estás efectivamente a procurar o mesmo objecto. No teu exemplo inicial, estavas a procurar um objecto que tinhas acabado de criar.
     
  5. syqe

    syqe Power Member

    Podes também redefinir o método equals que vem de Object, com qualquer coisa como "return a == ((Testar)other).a;"

    Assim vai retornar o que pretendes.
     
  6. metralha761

    metralha761 1st Folding then Sex

    AliFromCairo tive a testar e isso não dá, acho que é redundan-te ao que ja tenho.

    syqe não te percebi bem, voltar podes explicar?

    Acho que existe um metodo ou algo que devolve o valor a quando o indexOf o chama, ainda não sei o que será.
     
  7. syqe

    syqe Power Member

    O que se passa é que o indexof para além de verificar se o objecto é o mesmo, também verifica se o que estás a passa é obj.equals(obj2) do outro.

    Ou seja, todos os objectos herdam de object e todos têm um método equals que podes redefinir.

    Dentro da classe Testas deves fazer algo como:

    Código:
    boolean equals (Object other) {
      otherTestar = (Testar)other;
      return this.a == otherTestar.a;
    }
    
    Assim no indexOf, quando a primeira entrada obtiver equals a true, devolve esse index.
     

Partilhar esta Página