Se vc sabe o tipo da classe, pode usar a sua idéia mesmo:
intx=....; // aqui vc pega a qtd de objetos q vc querMinhaClasse[] m = new MinhaClasse[x];//Percorreovetorecriaosobjetos:for(int i = 0; i < x; i++)m=newMinhaClasse();
[]'s
carisio
D
duinewbahPJ
Se você nunca sabe o número de objetos, tb dá pra fazer :)
____
importjava.util.ArrayList;//Corpodaclassecomoescoponecessáriop/guardartodasasinstanciasArrayListminhasClasses=newArrayList();//Depois...emalgumpontoqdovcsabequeteráqueadicionar+algumaMinhaClassemc=newMinhaClasse();minhasClasses.add(mc);//Depoisp/acessarasinstânciasquevcguardouésópegardoArrayListminhasClasses.get(3); // Pega a quarta instância que vc guardou.
Acho que é isso.. =)
R
rodrigo_rnPJ
Eu trabalho dessa forma:
Crio um objeto auxiliar - Aux
public Curso Cur;
public Curso Aux;
public Curso Proximo;
Faço uma consulta que retorna varios cursos por exemplo, dentro do While eu vou instanciando um objeto para cada curso
Aux.Proximo=newCurso();Aux=Aux.Proximo;
Relaciono cada objeto Aux com o ponteiro do anterior, para não peder a referencia.
Depois é só fazer um for para ler os objetos
for(Aux=Cur.Proximo; Aux != null; Aux = Aux.Proximo) {
}
C
casperboxPJ
Carisio, testando sua idéia surgiu a dúvida não é preciso identificar a posição no vetor MinhaClasse. Tipo assim:
Pois é pensei assim, mas houve um erro: i não pode ser resolvido. Isso ocorreu apenas nos sets, no new passou beleza.
Alguma idéia de como resolver. Enquanto isso vou testar as outras idéias.
Grato pela atenção de todos. :lol:
C
casperboxPJ
Boa tarde, agradeço a todos que deram suas opiniões e ajudaram de alguma forma na solução do meu problema.
Carisio, ainda fica a minha dúvida quanto a sua solução.
duinewbah, consegui tirar muito proveito da sua sugestão, grato. Vou postar a classe final para vcs darem uma olhada.
…
package teste;
import java.util.Vector;
public class Cadastro2 {
privateVectorlistaAlunos=newVector();publicCadastro2(){}publicvoidsetAluno(Stringnome,doublenota){Alunoaluno=newAluno();aluno.setMatricula(listaAlunos.size()+1);aluno.setNome(nome);aluno.setNota(nota);listaAlunos.add(aluno);}publicAlunogetAluno(Stringnome){Alunob=null;for(inti=0;i<listaAlunos.size();i++){Alunoa=(Aluno)listaAlunos.get(i);if(nome==a.getNome()){b=a;}}if(b==null){System.out.println("Aluno, "+nome+", nao cadastrado!");}returnb;}publicvoidlistaDadosAluno(Alunoa){if(a!=null){System.out.println("Matricula: "+a.getMatricula());System.out.println("Nome: "+a.getNome());System.out.println("Nota: "+a.getNota());}else{System.out.println("Aluno não cadastrado!");}}publicstaticvoidmain(String[]args){Cadastro2c=newCadastro2();c.setAluno("Miguel",5.5);c.setAluno("Francisco",10.0);c.listaDadosAluno(c.getAluno("Francisco"));c.listaDadosAluno(c.getAluno("Miguel"));}
}
===========+++++++++±=-------------------------
Agradeço a todas as contribuições.
V
vieciliPJ
Cara, olhei um pouco o teu código e ví que vc deve armazenar os alunos em um java.util.Map, seu código ficaria mais otimizado e limpo:
packageteste;importjava.util.HashMap;importjava.util.ArrayList;publicclassCadastro2{privateHashMaplistaAlunos=newHashMap();privateintnuMatricula=0;publicCadastro2(){}publicvoidsetAluno(Stringnome,doublenota){Alunoaluno=newAluno();aluno.setMatricula(++nuMatricula);aluno.setNome(nome);aluno.setNota(nota);// coloca aluno na lista de alunos// possibilita que existam alunos com nomes idênticosif(listaAlunos.get(nome)!=null){ArrayListal=(ArrayList)listaAlunos.get(nome);al.add(aluno);listaAlunos.put(nome,al);}else{ArrayListal=newArrayList();al.add(aluno);listaAlunos.put(nome,al);}}// retorna o(s) aluno(s) com determinado nome, ou null caso não existirpublicArrayListgetAluno(Stringnome){return(ArrayList)listaAlunos.get(nome);}publicvoidlistaDadosAluno(Alunoa){if(a==null)thrownewNullPointerException("null");System.out.println("Matricula: "+a.getMatricula());System.out.println("Nome: "+a.getNome());System.out.println("Nota: "+a.getNota());}publicstaticvoidmain(String[]args){Cadastro2c=newCadastro2();c.setAluno("Miguel",5.5);c.setAluno("Francisco",10.0);c.listaDadosAluno((Aluno)c.getAluno("Francisco").get(0));c.listaDadosAluno((Aluno)c.getAluno("Miguel").get(0));}}
Acho q isso vai melhorar um pouco… (é mais complicado, mas eh melhor!!)
C
casperboxPJ
Henrique, quero entender sua colocação. Você pode conceituar e diferenciar HashMap e Vector para mim? Pq usar um e não o outro?
Grato
M
matheusPJ
o hashmap é só uma tabela de hash, q calcula onde vai salvar o elemento atravez de seu numero de hash…, ou seja, é uma estrutra nao ordenada e não classificada… ja o vector é uma lista, nao classificado, mas ordenado, pq ele coloca elementos um atraz do outro… e nao calcula nenhum hash pro elemento…
C
casperboxPJ
Matheus, entendi sua explicação. Mas, não entendi pq o Henrique quis substituir o meu Vector por um HashMap.
Gostaria de acrescentar que está classe é só um teste para uso de vetores, na classe que usarei mesmo, o vetor abrigará objetos threads. Caso alguém tenha alguma observação agradeço.
H
HSNPJ
Uma vantagem de trocar Vector por HashMap, que acredito ser o que Henrique quis, é que no Vector os objetos são acessados pelo índice, que é obrigatoriamente um inteiro que geralmente não tem relação com o objeto armazenado; no HashMap, você usa um outro objeto como indicador de posição. No exemplo dado, você acessa as informações do aluno pelo nome. A melhor escolha depende do que pretende fazer com a coleção: acessar as informações usando HashMap é mais fácil e intuitivo, mas se precisar iterar por todos os elementos com muita freqüência, um ArrayList, em vez de Vector, é mais apropriado.
Aí é com você. É interessante ser capaz de pegar uma Thread específica dentro da coleção, ou é melhor ser capaz de varrê-la usando fors?
V
vieciliPJ
É isso o q o Humberto falou!
Se as suas estruturas de dados forem acessadas de forma concorrente, use estruturas preparadas de modo synchronized, ao invés de HashMap use HashTable, e ao invés de ArrayList use Vector mesmo; mas procure trabalhar sempre com interfaces List, Map, Set etc…
Se quiser ter uma visão maior sobre Collections dê uma olhada na Edição 18 da JavaMagazine, tem um ótimo artigo sobre o assunto, muito bom mesmo!!
M
maviPJ
E não esquecer que Hashset não é sincronizado e Vector é.