Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как добавить элемент в массив

Короткий ответ

Размер массива задаётся при создании и не меняется. Чтобы «добавить» элемент, создайте массив на один больше:

void main() {
    int[] numbers = {1, 2, 3};
    numbers = Arrays.copyOf(numbers, numbers.length + 1);
    numbers[numbers.length - 1] = 4;
 
    IO.println(Arrays.toString(numbers));
}

Результат:

[1, 2, 3, 4]

Вставка в середину

System.arraycopy() сдвигает хвост массива, освобождая место:

int[] insert(int[] array, int index, int value) {
    int[] result = new int[array.length + 1];
    System.arraycopy(array, 0, result, 0, index);
    result[index] = value;
    System.arraycopy(array, index, result, index + 1, array.length - index);
    return result;
}
 
void main() {
    IO.println(Arrays.toString(insert(new int[] {1, 2, 4}, 2, 3)));
}

Результат:

[1, 2, 3, 4]

Лучше — ArrayList

Если элементы часто добавляются, используйте ArrayList: он сам увеличивает внутренний массив:

void main() {
    var names = new ArrayList<String>();
    names.add("Anna");
    names.add("Oleg");
    names.add(1, "Boris");
 
    IO.println(names);
}

Результат:

[Anna, Boris, Oleg]

Частая ошибка

Записать значение за пределы массива. Java не расширяет массив, а выбрасывает исключение:

void main() {
    int[] numbers = {1, 2, 3};
    numbers[3] = 4;
}

Результат:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3

Функции из этого ответа

  • Arrays.copyOf() — Копирует массив в новый — той же или другой длины. Часть массива копирует copyOfRange().
  • List.add() — Добавляет элемент в конец списка или в указанную позицию.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.