ArrayList исключение вне границ - PullRequest
5 голосов
/ 17 января 2012

У меня есть следующий код:

ArrayList<Integer> arr = new ArrayList<Integer>(10);
arr.set(0,5);

Я получаю ошибку индексации границ, и я не знаю, почему.Я объявил ArrayList размера 10. Почему я получаю эту ошибку?

Ответы [ 9 ]

7 голосов
/ 17 января 2012

Вы объявили ArrayList, который имеет начальную емкость 10 элементов, но вы не добавили элемент в этот список, то есть список пуст. set заменит существующий элемент, но, поскольку в списке нет элемента, возникает исключение. Вы должны добавить элементы раньше, используя метод add.

Initial capacity означает, что массив, который содержит внутренний список, имеет размер 10 в начале. При добавлении дополнительных элементов в список размер этого внутреннего массива может измениться.

4 голосов
/ 17 января 2012

просмотр исходного кода JDK ArrayList.set(int, E) дает подсказку: в вашем списке должно быть как минимум N элементов, прежде чем вы сможете вызвать set(N-1, E).

Добавьте ваши элементы методом add().

3 голосов
/ 17 января 2012

Начальный содержащийся массив указан как "10", фактическое количество элементов в массиве равно 0.

Чтобы добавить «5» в первый индекс, просто сделайте arr.add (5)

Значение, передаваемое конструктору ArrayList, является начальной емкостью резервного хранилища массива. Когда вы добавляете элементы в точку, которая превышает эту емкость, внутренне ArrayList выделит новый массив хранения размером и скопирует элементы в новый массив резервного хранилища.

2 голосов
/ 17 января 2012

Из документации :

Создает пустой список с указанной начальной емкостью.

(акцент мой)

1 голос
/ 17 января 2012

То, что вы передали в конструктор, это просто начальная емкость массива, на которую опирается список. Список все еще пуст после строительства. Более того, вам следует рассмотреть возможность использования общего списка, если вы хотите хранить, например, просто целые числа.

0 голосов
/ 17 января 2012

В конструкторе вы указали начальную вместимость.Однако размер списка по-прежнему равен 0, поскольку вы еще не добавили никаких элементов.

Из документации ArrayList.set():

IndexOutOfBoundsException - если индекс выходит за пределы диапазона (index <0 || index> = size ()).

0 голосов
/ 17 января 2012

Если вы посмотрите на javadoc , обратите внимание, что там написано:

Заменяет элемент в указанной позиции в этом списке на указанный элемент.

Вам нужен элемент, прежде чем вы сможете заменить его. Попробуйте

arr.add(5);

, чтобы просто добавить элемент.

0 голосов
/ 17 января 2012

set (int index, E element) Заменяет элемент в указанной позиции в этом списке на указанный элемент.U должен использовать add ()

0 голосов
/ 17 января 2012

Используйте arr.add(0.5). set метод заменит существующий элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...