2010-02-28 1 views
5

È possibile farlo in Java? Forse sto usando la sintassi sbagliata?ArrayLists e indicizzatori in Java

ArrayList<Integer> iAL = new ArrayList<Integer>(); 
iAL.addAll(Arrays.asList(new Integer[] {1, 2, 3, 4, 5 })); 

for (int i = 0; i < iAL.size(); ++i) { 
    System.out.println(iAL[i]); //<-------- HERE IS THE PROBLEM 
} 

Inoltre, è possibile fare qualcosa di simile

iAL.addAll(new int[] {1, 2, 3, 4, 5}); 

come si vede su C#?

Grazie

risposta

10

Prova System.out.println(iAL.get(i));. Perché è un List, non array

+2

Così liste in Java non possono utilizzare gli indicizzatori? Probabilmente è legato a Java che non supporta il sovraccarico dell'operatore? –

+3

Sì, hai ragione, non ci sono indicizzatori e altre cose come questa :( –

+0

Java non supporta il sovraccarico dell'operatore, quindi non è possibile utilizzare l'operatore di indicizzazione ([]) per qualcosa di diverso dagli array. – Thirler

4
ArrayList<Integer> iAL = new ArrayList<Integer>(); 
iAL.addAll(Arrays.asList(new Integer[] {1, 2, 3, 4, 5 })); 

for (int i = 0; i < iAL.size(); ++i) { 
    System.out.println(iAL.get(i)); 
} 

per quanto ne so

iAL.addAll(Arrays.asList(new Integer[] {1, 2, 3, 4, 5 })); // questa è la soluzione più breve

+4

Arrays.asList() accetta un parametro varargs, quindi può essere più breve – Carl

+0

Ora è interessante: –

+0

Inoltre, se si stanno aggiungendo immediatamente quegli elementi, l'uso del costruttore di copie può accorciare ulteriormente le cose. – Carl

3

Inoltre, vorrei aggiungere due altre note circa il codice:

Per esempio, combinando diversi suggerimenti utili da altre risposte

List<Integer> list = new ArrayList<Integer>(); 
list.addAll(Arrays.asList(1, 2, 3, 4, 5)); 

for (Integer i : list) { 
    System.out.println(i); 
} 

Addendum: La domanda di coding to the interface è interessante, e commentare Carl s' è particolarmente proposito. Utilizzando il tipo di interfaccia, List, si riduce al minimo l'obbligo di utilizzare un'implementazione specifica. In caso di necessità, è possibile passare successivamente a qualsiasi class that implements List.

+0

Non capisco il tuo secondo punto (codifica all'interfaccia) Cosa c'entra con questo? –

+0

dichiarando iAL come elenco invece di ArrayList a meno che tu non abbia intenzione di usare alcuni dei metodi di gestione delle dimensioni in ArrayList, probabilmente è una buona idea. – Carl

4

Inoltre, è possibile fare qualcosa di simile

iAL.addAll(new int[] {1, 2, 3, 4, 5}); 

Abbastanza vicino:

iAL.addAll(Arrays.asList(1, 2, 3, 4, 5)); 

Non c'è bisogno per la new Integer[] nel codice.

3

No, è necessario utilizzare .get(i); [i] è solo per gli array. Tuttavia, se non hai bisogno della variabile index per qualcos'altro, la sintassi for-each è preferibile (come da risposta di trashgod).

Per la seconda, se non si è il ridimensionamento della List (che è ancora bene a mutare singoli elementi), sarebbe perfettamente ragionevole fare quanto segue:

List<Integer> iAL = Arrays.asList(1, 2, 3, 4, 5); 

nota, che accetta un Arrays.asList() parametro varargs, quindi nessuna ragione per costruire esplicitamente la matrice.

Se si desidera un elenco ridimensionabile, il seguente è probabilmente il più breve:

List<Integer> iAL = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5)); 
2

io refactoring del codice per intero:

List<Integer> iAL = Arrays.asList(1, 2, 3, 4, 5); 

for (int i : iAL) { 
    System.out.println(i); 
}