2015-09-02 16 views
5

ja stworzenie ArrayList i jego rozmiar jest 40Initilize ArrayList zerami

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

Jak mogę zainicjować myList zerami 0? Próbowałem to

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

ale mam

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

Odpowiedz

13

Możesz użyć metody Collections.fill(List<? super T> list,T obj), aby wypełnić listę zerami. W twoim przypadku ustawiasz new ArrayList<>(40) tutaj 40 nie jest długością listy, ale początkową pojemnością. Możesz użyć tablicy do zbudowania listy z wszystkimi zerami. Sprawdź poniższy fragment kodu.

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); 

WYJŚCIE

[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

Używaj .add(0) zamiast. Konstruktor ArrayList(int capacity) ustawia początkową pojemność, ale nie elementy początkowe. Twoja lista jest pusta.

+1

Zauważ, że 'Arrays.asList (new int [40])' zwraca 'List ', więc powyższa instrukcja da błąd podczas kompilacji. –

0

Nie można mieć raczej dodany niż ustawienie. myList.add będzie działać. Możesz ustawić tylko wtedy, gdy istnieje już wpis w tym konkretnym indeksie. set Metoda tylko zastępuje zawartość obecną w tym indeksie.
Check api documentation for set method here

9

Spróbuj Collections.nCopies():

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

OR:

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

Zobacz doc

+0

To jest bardziej odpowiednie według mnie. +1 Nicea. –

+1

Należy zauważyć, że drugi przykład zwraca niezmienną listę - prawdopodobnie dlatego powinien być zawinięty w ArrayList, jak pokazano w pierwszym przykładzie. – glaed

+1

To powinna być zaakceptowana odpowiedź! –

0

Java 8 Realizacja:

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

'Collections.nCopies' jest znacznie lepszy – ZhekaKozlov