2015-09-02 2 views
5

Я создаю ArrayList и его размер 40Initilize ArrayList с нулями

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

Как я могу инициализировать myList с нулями 0? Я попробовал этот

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

, но я получаю

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

ответ

13

Вы можете использовать Collections.fill(List<? super T> list,T obj), чтобы заполнить ваш список нулями. В вашем случае вы устанавливаете new ArrayList<>(40) здесь 40 не длина списка, а начальная емкость. Вы можете использовать массив для создания списка со всеми нулями в нем. Оформить заказ после части кода.

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

ВЫВОД

[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

Используйте .add(0) вместо этого. Конструктор ArrayList(int capacity) устанавливает начальную емкость, но не начальные элементы. Таким образом, ваш список по-прежнему пуст.

+1

Обратите внимание, что 'Arrays.asList (new int [40])' return 'List ' поэтому ваш вышеприведенный оператор даст ошибку времени компиляции. –

0

Там вы могли бы иметь довольно добавил, чем установка. myList.add будет работать. Вы можете установить только в том случае, если на этом конкретном индексе уже есть запись. set метод только заменяет содержимое, присутствующее в этом индексе.
Check api documentation for set method here

9

Попробуйте Collections.nCopies():

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

ИЛИ:

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

См doc

+0

Это больше подходит по мне. +1 Хороший. –

+1

Обратите внимание, что второй пример возвращает неизменяемый список - вероятно, поэтому он должен быть завернут в ArrayList, как показано в первом примере. – glaed

+1

Это должен быть принятый ответ! –

0

Java 8 Реализация:

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

'Collections.nCopies' намного лучше – ZhekaKozlov

Смежные вопросы