Как добавить элемент в массив
Короткий ответ
Размер массива задаётся при создании и не меняется. Чтобы «добавить» элемент, создайте массив на один больше:
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() — Добавляет элемент в конец списка или в указанную позицию.