2015-09-02 14 views
5

Sto creando un ArrayList e la sua dimensione è 40Initilize un ArrayList con zeri

ArrayList<Integer> myList= new ArrayList<>(40); 

Come posso inizializzare myList con zeri 0? Ho provato questo

for(int i=0; i<40; i++){ 
    myList.set(i, 0); 
} 

ma ottengo

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 

risposta

13

È possibile utilizzare il metodo Collections.fill(List<? super T> list,T obj) per riempire l'elenco di zeri. Nel tuo caso stai impostando new ArrayList<>(40) qui 40 non è la lunghezza della lista ma la capacità iniziale. Puoi usare la matrice per costruire la tua lista con tutti gli zeri in essa contenuti. Acquista il seguente codice.

Integer [] arr = new Integer[40]; 
ArrayList<Integer> myList= new ArrayList<>(Arrays.asList(arr)); 
Collections.fill(myList, 0);//fills all 40 entries with 0 
System.out.println(myList); 

USCITA

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
3

Usa .add(0) invece. Il costruttore ArrayList(int capacity) imposta una capacità iniziale, ma non gli articoli iniziali. Quindi la tua lista è ancora vuota.

+1

Si noti che 'Arrays.asList (new int [40])' restituisce 'List ' quindi l'istruzione sopra riportata fornirà un errore in fase di compilazione. –

0

Ci si potrebbe avere piuttosto aggiunto che impostare. myList.add funzionerà. È possibile impostare solo se esiste già una voce in quell'indice particolare. set Il metodo sostituisce solo il contenuto presente in quell'indice.
Check api documentation for set method here

9

Prova Collections.nCopies():

ArrayList<Integer> myList = new ArrayList<Integer>(Collections.nCopies(40, 0)); 

O:

List<Integer> myList = Collections.nCopies(40, 0); 

Vedi doc

+0

Questo è più adatto secondo me. +1 Nizza. –

+1

Si noti che il secondo esempio restituisce un elenco immutabile, che è probabilmente il motivo per cui dovrebbe essere racchiuso in un ArrayList come mostrato nel primo esempio. – glaed

+1

Questa dovrebbe essere la risposta accettata! –

0

Java 8 implementazione:

ArrayList<Integer> list = IntStream.of(new int[40]) 
        .boxed() 
        .collect(Collectors.toList()); 
+2

'Collections.nCopies' è molto meglio – ZhekaKozlov