Java ArrayList OutofBounds при добавлении элемента - PullRequest
1 голос
/ 12 марта 2012

У меня есть этот массив:

ArrayList<Problem> problems = new ArrayList <Problem>( 100 );

, затем я пытаюсь сделать объект для его вставки:

Problem p = new Problem ();
p.setProblemName( "Some text" );

Затем я пытаюсь добавить объект в массив:

problems.set(1, p);

Но в этот момент система выдает исключение времени выполнения:

03-12 18:58:04.573: E/AndroidRuntime(813): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0

Но если я увеличу начальный размер массива до 100. Почему происходит эта ошибка?Кажется, это просто супер.

Спасибо!

Ответы [ 5 ]

2 голосов
/ 12 марта 2012

Вы не используете set для добавления к ArrayList, вы используете его для перезаписи существующего элемента.

problems.set(1, p); //Overwrite the element at position 1 

Вы используете add

problems.add(p); 

добавит его в конце

problems.add(1, p);

добавит его в индекс 1, это создаст исключение IndexOutOfBoundsException для
index <0 или index> ArrayList.size(). Который будет иметь место при первой попытке добавления.

Также только для вашего знания

problems.add(ArrayList.size(), p); //Works the same as problems.add(p);
2 голосов
/ 12 марта 2012

ArrayList#set()

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

size() возвращает количество элементов в списке массива, а не емкость.

1 голос
/ 12 марта 2012

Когда вы пишете ArrayList<Problem> problems = new ArrayList <Problem>( 100 );, вы только говорите Java, что думаете, что собираетесь использовать этот тип емкости (который оптимизирует размер базового массива), но размер списка все равно равен 0.

Вам нужно использовать add():

problems.add(p);

добавит p в первую позицию.

List<Problem> problems = new ArrayList <Problem>();
Problem p = new Problem ();
p.setProblemName( "Some text" );

problems.add(p);

Problem p2 = problems.get(0); //p2 == p
0 голосов
/ 12 марта 2012

try

problems.set(0, p); 

первая позиция в массиве всегда равна 0.

edit вы должны использовать метод .add () для добавления объектав массив хотя

0 голосов
/ 12 марта 2012

вы должны написать это вместо:

problems.add(0, p);

У вас нет 0-го участника, которого вы хотите вставить p в 1-е место!

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