Часто возникает путаница при работе с ArrayList в Java, особенно когда речь идет об инициализации и использовании начального размера ArrayList. Например, можно задать начальный размер для ArrayList следующим образом:
ArrayList<Integer> arr = new ArrayList<Integer>(10);
Однако, если попытаться добавить элемент по конкретному индексу, который еще не был инициализирован, например:
arr.add(5, 10);
Это вызовет исключение IndexOutOfBoundsException
. Почему же так происходит?
Начальный размер ArrayList в Java, задаваемый в конструкторе, это просто внутренняя оптимизация, связанная с использованием памяти. Когда задается начальный размер, выделенная память под массив остается пустой, и никакого реального пространства для объектов в этом массиве не создается. По этой причине, когда пытаются добавить элемент в пустую ячейку массива, возникает исключение.
Добавление элемента по индексу в ArrayList возможно только в том случае, если этот индекс уже инициализирован. В противном случае, необходимо добавлять элементы поочередно, начиная с индекса 0.
Функция add(int index, E element)
позволяет вставить элемент в определенное место ArrayList, сдвигая все последующие элементы. Если же попытаться добавить элемент на место, которое еще не было инициализировано, будет выброшено исключение.
Важно понимать, что начальный размер ArrayList – это не количество элементов в нем, а лишь внутренняя оптимизация, позволяющая уменьшить количество операций изменения размера массива при его заполнении.
Добавить комментарий