Trabalhando com Vector, ArrayList

15 respostas
R

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?

15 Respostas

ricardolecheta

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.

vamorim

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

Assim:

import java.util.*; 

(...)

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

(...)
R

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”

vamorim

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

R

Certeza absoluta!!! :roll:

vamorim

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. :?

_fs

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:

R

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

<blockquote>	                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]));

}

}

</blockquote>

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

Rafael_Steil

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

Rafael

R

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

Rafael_Steil

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

Rafael

R
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
aborges

Qual o Output disto?

Rafael_Steil

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

R

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.

Criado 13 de junho de 2004
Ultima resposta 23 de jun. de 2004
Respostas 15
Participantes 6