Страница 1 из 1

add

Добавлено: 10 сен 2014, 15:39
WindStraider
void java.util.ArrayList.add(int index, String object)

Здравствуйте!

Подскажите пожалуйста , за что конктектно отвечает индекс метода add ? Я понимаю что он отвечает за расположения объекта , но когда я его инкреминирую , то вылетает ошибка, связанная с неправельным индексом . А без инкремента все нормально logoname.add(0,SaySee3);
Может он используется для многомерных массивов ?

Я инкреминирую так :
static int i=0;
logoname.add(i,SaySee3);
i++;

------------------------------
Inserts the specified object into this ArrayList at the specified location. The object is inserted before any previous element at the specified location. If the location is equal to the size of this ArrayList, the object is added at the end.

Overrides: add(...) in AbstractList
Parameters:
index the index at which to insert the object.
object the object to add.
-----------------------------

-----------------------------
@Override public void add(int index, E object) {
Object[] a = array;
int s = size;
if (index > s || index < 0) {
throwIndexOutOfBoundsException(index, s);
}
---------------------------

Re: add

Добавлено: 10 сен 2014, 15:54
KamiSempai
Возможно i инкрементируется еще где-то. Скорее всего из за модификатора static, так как переменная становится общей для всех классов.
Точнее сказать не могу, код вырван из контекста.

Re: add

Добавлено: 10 сен 2014, 16:19
Mikhail_dev
Суть (скорее всего) вот какая: ArrayList был изменен в java 8. И если в Java<8 по умолчанию создается коллекция в 10 элементов
ArrayList list = new ArrayList(); //пустой конструктор создает 10 элементов
то в java 8 создается коллекция с нулём элементов. В итоге код выглядит так
[syntax=java5]
public void More ...add(int index, E element) {
458 rangeCheckForAdd(index);
459
460 ensureCapacityInternal(size + 1); // Increments modCount!!
461 System.arraycopy(elementData, index, elementData, index + 1,
462 size - index);
463 elementData[index] = element;
464 size++;
465 }

644 private void More ...rangeCheckForAdd(int index) {
645 if (index > size || index < 0)
646 throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
647 }
[/syntax]
Я не нашел где size инициализируется, если выполнить к примеру такой код
[syntax=java5]ArrayList list = new ArrayList();
list.add(0,new Object());[/syntax]
может из-за того, что size не инициализируется, то он имеет хаотичное значение (такое бывает для простых типов) и получается, что условие
if (index > size || index < 0)
приводит к true.

Ну это как вариант. Я честно говоря не знаю какой OpenJdk сейчас используется, но думаю что все таки последний (я про OpenJDK).
Создайте коллекцию и проверьте сразу, какой у ней результат возвращает метод getSize

Re: add

Добавлено: 10 сен 2014, 16:24
WindStraider
KamiSempai писал(а):Возможно i инкрементируется еще где-то. Скорее всего из за модификатора static, так как переменная становится общей для всех классов.
Точнее сказать не могу, код вырван из контекста.
Спасибо . Ошибка была связанна с моей невнимательностью.