Originariamente inviato da Loue
Come posso fare per indicizzare gli elementi dell'array nell'arraylist? E se avessi un array di arraylist di array, come potrei fare?
Un po' di cose ci sarebbero da farti notare:
1) Hai usato ArrayList come "raw type". Da Java 5 ci sono i "generics" e tutte le collezioni sono state rese "generiche". E il fatto che hai usato ....add(i) denota che stai usando almeno Java 5, perché questo è un "auto-boxing", passi un int che viene automaticamente "boxato" (dal compilatore) in un Integer. Le collezioni accettano solo oggetti, infatti.
Quindi sarebbe più appropriato se "parametrizzi" le collezioni. Nel primo caso: ArrayList<Integer>
2) Il primo passo non fa una piega. Gli int vengono boxati in Integer e nel ciclo di stampa estrai gli Integer che passi direttamente al println. Viene quindi stampato il risultato del toString() invocato sull'oggetto Integer. Quindi appunto mostra il valore numerico.
3) Nel secondo passo ci sono altre questioni. Intanto istanzi 1 solo array di 2 elementi e lo aggiungi più volte nel ArrayList. Vuol dire tutti gli elementi nel ArrayList faranno riferimento allo stesso identico array. E anche se cambi di volta in volta il contenuto dell'array arrayOfXY, esso è 1 solo e alla fine tutti gli elementi nel ArrayList faranno riferimento all'array nel suo "ultimo" stato.
Questo è il classico errore che si commette quando non si conosce bene come funzionano i "reference" e le collezioni.
4) Nel terzo passo fai il ciclo di stampa per l'ArrayList di array. Il fatto è che il get() ti restituisce l'oggetto int[], che tu passi direttamente a println che lo vede come "Object" e gli array non implementano il toString() .... rimane quello ereditato da Object che fornisce la stringa (generalmente poco utile) del tipo es. [I@3e25a5 (per un array di int)
Volevi stampare gli elementi dell'array?? Allora lo estrai e lo "vedi" come int[] e fai un ciclo per stampare i singoli elementi. O usi il metodo statico Arrays.toString() che fornisce una rappresentazione utile e gradevole degli elementi.
5) Il quarto passo è proprio sbagliato come sintassi. i[j], beh, i è un int, non puoi certo usare [ ] !!!
Conclusioni: usa i generics.
Nel primo caso usa ArrayList<Integer>
Nel secondo caso usa ArrayList<int[]>. E se il tuo obiettivo è avere array "distinti" per ogni elemento del ArrayList devi chiaramente istanziare N array, non uno solo unico.
Nel passo 3 puoi quindi fare:
codice:
int[] arrElem = arraymosse.get(i);
Quindi dovresti fare o il classico ciclo per stampare tutti gli elementi o fare:
codice:
System.out.println(Arrays.toString(arrElem));
Il passo 4 è inutile se fai come detto.