Trabalhando com Vector, ArrayList

Criei um objeto qq, digamos Pessoa. Quero preencher um Vector (Ou ArrayList) com objetos do tipo Pessoa. Como faço para percorrer os elementos do Vector (ou ArrayList) com Iterator e recuperar propriedades/ chamar métodos de cada Pessoa?
Outra pergunta: o método contains leva em conta a referencia dos objetos ou o que eu definir se sobrescrever o equals?

o método contains vai olhar o método equals. Por default o equals() compara a referencia do objeto.

Pessoa p  = new Pessoa("Ricardo");
Pessoa p2  = new Pessoa("Ricardo");

List l = new ArrayList();
l.add(p);

System.out.println(l.contains(p));    // imprime true(mesma referencia)
System.out.println(l.contains(p2));  // imprime false

Para a segunda linha imprimir true precisa sobrescrever o equals/hashcode.

[quote=“rlicciardo”]Como faço para percorrer os elementos do Vector (ou ArrayList) com Iterator e recuperar propriedades/ chamar métodos de cada Pessoa?
[/quote]

Assim:

import java.util.*; 

(...)

     for(Iterator it=suaColecao.iterator(); it.hasNext();){  
         Pessoa p = (Pessoa) it.next();
         p.metodo1();
         p.metodo2();
    }

(...)

Neste exemplo que vc deu, eu sempre obtenho um ClassCastException, alguma idéia?

ArrayList x = a.getArquivos();
for (Iterator i = x.iterator();i.hasNext() ; ){
Arquivo z = (Arquivo) i.next();
System.out.println("Resultado " + z.getNome());}

O método getArquivos() do Objeto “a” retorna um ArrayList de “Arquivos”

Você tem certeza que não está inserindo nenhum objeto em seu ArrayList que não é da sua classe Arquivo?

Certeza absoluta!!! :roll:

Sobrescreva o método toString de Arquivo e teste isso:

ArrayList x = a.getArquivos();
for (Iterator i = x.iterator();i.hasNext() ; ){ 
   Object z = i.next();
   System.out.println(z);
} 

A ClassCastException é lançada obviamente quando se tenta fazer uma conversão inválida. Se você tem certeza que não inseriu outro objeto que não é da classe Arquivo, certamente está tentando fazer uma coerção errada em algum outro lugar. Qq coisa, posta aí as mensagens de erro. :?

Também tive este problema com ClassCastException, mas era BEM bizarro, e só ocorria ao tentar fazer a iteração com um iterator.

Ao pegar o className na iteração eu recebia Proxy#:NomeRealdaClasse

Mas ao fazer, por exemplo, ArrayList.get( 1 ).className() eu recebia NomeRealdaClasse.

Bizarro :expressionless:

List arqs = new ArrayList();
List dirs = new ArrayList();

[quote] File[] files = f.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()){
arqs.add(files[i]);
}
else{
dirs.add(new Diretorio (files[i]));
}
}
[/quote]

Então, eu criei o ArrayList e o preenchi com objetos do tipo File.
Não consigo recuperar! Alguma idéia?

O que significa “Nao consigo recuperar”? Que tipo de problema voce esta tendo?

Rafael

Eu quero acessar um File individualmente, ou listar os arquivos. Não es´tou conseguindo :frowning:

Como eh o codigo que vc fez e que nao esta funcionando?

Rafael

[code]
public void listaArquivos(){
//Iterator i = arqs.iterator() ;
//while (i.hasNext())
//System.out.println(i.next().toString() );
for (int i=0; i < arqs.size() ; i++)
System.out.println(arqs.get(i));
}

De nenhu jeito rolou[/code]

Qual o Output disto?

rlicciardo, de mais informacoes a respeito do problema, como resultado que vc espera, o resultado obtido, o que voce nao compreende etc… A bola de cristal nos ajuda muitas vezes, mas nao faz milagres :shock:

Rafael

Pessoal, algo está muito estranho:


File[] arqs;

public Diretorio(File f){
   arqs = f.listFiles();
   for (int i = 0; i < arqs.length; i++) {
      if (arqs[i].isFile()){
          System.out.println("Adicionou o arquivo " + arqs[i].getName() );}
     else{
          System.out.println("Adicionou o diretorio " + arqs[i].getName());}  
    }
}

Neste trecho eu por exemplo obtenho 4 arquivos (length = 4).
Se eu tiver outro método para ler o arqs.length ele retorna 1. Muito estranho.