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);
}
---------------------------
add
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: add
Суть (скорее всего) вот какая: 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
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
-
WindStraider
- Сообщения: 9
- Зарегистрирован: 10 сен 2014, 15:28
Re: add
Спасибо . Ошибка была связанна с моей невнимательностью.KamiSempai писал(а):Возможно i инкрементируется еще где-то. Скорее всего из за модификатора static, так как переменная становится общей для всех классов.
Точнее сказать не могу, код вырван из контекста.
