PDA

View Full Version : [java] array di collection


DinoCazares
25-06-2007, 20:08
Non so se sia una cosa giusta o sbagliata a livello concettuale, comunque mi farebbe comodo poter utilizzare un'insieme di strutture di tipo collection... e mi chiedevo se è possibile definire un array di questo tipo di dato, e poi anche un array di relativi iteratori, per potere poi utilizzare queste collection in un ciclo, con il classico indice "i"... ad esempio una cosa del genere

Collection Istanze[] = new Collection [20];
Iterator it[] = new Iterator [20];
int i=0;

e poi il ciclo

for (it[i] = Istanze[i].iterator(); it[i].hasNext(); ) {
...
...
}

Non ricevendo errori di compilazione ho pensato che la cosa fosse lecita, però il risultato non è purtroppo quello voluto, perchè i metodi (che hanno come valore di ritorno appunto una Collection) pur non generando errori non riempiono più la lista...
Esempio pratico:

se anzichè dichiarare un'array di collection ne dichiaro una sola, il metodo farà il suo dovere riempiendo "Istanze"
Istanze = Class.getNamedSubclasses();

Mentre
Istanze[i] = Cls.getNamedSubclasses();
non genera un bel niente...

scusate la mia ignoranza in java, ma non so se sto sbagliando qualcosina e in realtà sia tutto fattibile, o se sia proprio sbagliato e impossibile lavorare con array di collection... Chi lo sa me lo dica, così evito di perderci giorni senza senso! ;) :D Grazie

andbin
25-06-2007, 20:20
Non so se sia una cosa giusta o sbagliata a livello concettuale, comunque mi farebbe comodo poter utilizzare un'insieme di strutture di tipo collection... e mi chiedevo se è possibile definire un array di questo tipo di dato, e poi anche un array di relativi iteratori, per potere poi utilizzare queste collection in un ciclo, con il classico indice "i"... ad esempio una cosa del genere

Collection Istanze[] = new Collection [20];
Iterator it[] = new Iterator [20];
int i=0;

e poi il ciclo

for (it[i] = Istanze[i].iterator(); it[i].hasNext(); ) {
...
...
}Dal tuo codice deduco che non hai intenzione di usare i generics e le nuove funzionalità di Java 5, vero?

DinoCazares
25-06-2007, 20:43
mmmhh... non so cosa sono... :mc: son poco esperto di java... sarebbe qualcosa che fa al caso mio?

morskott
25-06-2007, 20:56
teoricamente potresti fare unaCollection<Collection<Object>> miaCollection=new ImplementedCollection<Collection<Object>>()per poi scorrerlo conIterator<Collection<Object>> it=miaCollection.iterator();
while(it.hasNext()){
Collection<Object> nestedCollection=it.next();
/*
Gestire collection interna
*/
}

andbin
25-06-2007, 20:57
mmmhh... non so cosa sono... :mc: son poco esperto di java... sarebbe qualcosa che fa al caso mio?Uhm ... allora no, se non conosci i "generics" e non hai tempo/voglia di studiarli è meglio se li lasci perdere. ;)

Ecco un esempio di un array di 20 collezioni (di tipo ArrayList):
Collection[] collezioni = new Collection[20];

for (int i=0; i<collezioni.length; i++)
collezioni[i] = new ArrayList ();
Per gli iteratori, il pezzo di codice che hai postato tecnicamente va bene ma dovresti spiegare meglio, nel senso che il ciclo che hai fatto vale per 1 iteratore (quello indicato da it[i]). Se all'interno del ciclo usi solo it[i], allora è un invariante e non avrebbe senso avere un array di 20 iteratori.
Ma ripeto .... non so cosa devi fare di preciso e quindi non posso dire di più.

lovaz
26-06-2007, 09:14
mmmhh... non so cosa sono... :mc: son poco esperto di java... sarebbe qualcosa che fa al caso mio?

Per breve intro ai generici e al nuovo for (che e' utile anche quello):
http://digilander.libero.it/computinglab/javabase/06.html

DinoCazares
26-06-2007, 23:19
grazie del supporto! ho letto la breve guida sui generics, sì mi sembra una buona cosa, è piuttosto simile al discorso dei template in C++, io come dicevo di java non son pratico ma qualcosina in quà e là capisco (poco!! :D )

però comunque ieri sera ce l'ho fatta con l'array di collection fatto come lo stavo facendo io, andava tutto bene, era solo un metodo sbagliato che avevo lasciato per distrazione che mi svuotava la lista e per questo il risultato era... null... ora è ok, almeno quello ;) grazie ancora, ciao