← Назад к вопросам

Что будет если добавить еще один элемент при размере массива 10?

1.3 Junior🔥 71 комментариев
#Коллекции и структуры данных

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Ответ на вопрос о добавлении элемента в массив фиксированного размера

В контексте классических массивов (например, в Java int[] или Kotlin Array<T>) при попытке добавить элемент в массив размером 10 произойдет ошибка времени выполнения (Runtime Error). В отличие от динамических коллекций вроде ArrayList, массивы имеют фиксированную длину, которая определяется при создании и не может быть изменена.

Что конкретно произойдет в коде

Если вы попытаетесь обратиться к индексу 10 (или любому индексу за пределами 0–9), будет выброшено исключение:

// Пример на Java
int[] array = new int[10];
array[10] = 42; // ArrayIndexOutOfBoundsException
// Пример на Kotlin
val array = arrayOfNulls<Int>(10)
array[10] = 42 // ArrayIndexOutOfBoundsException

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

Для динамического добавления элементов существуют специальные коллекции, наиболее популярные из них:

  • ArrayList (Java/Kotlin): автоматически расширяется при заполнении
  • MutableList (Kotlin): интерфейс для изменяемых списков
  • List с мутабельными операциями (Kotlin)

Практическое решение проблемы

Вместо попытки "добавить" элемент в массив, программист должен:

  1. Создать новый массив большего размера
  2. Скопировать все элементы из старого массива
  3. Добавить новый элемент в конец

Вот как это выглядит на практике:

// Исходный массив размером 10
val originalArray = arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

// Создаем новый массив размером 11 (на 1 больше)
val newArray = originalArray.copyOf(originalArray.size + 1)

// Добавляем новый элемент (индекс 10 теперь доступен)
newArray[10] = 11

println(newArray.contentToString()) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

Под капотом коллекций

Интересно, что ArrayList внутри использует именно этот подход с массивами:

  • При создании ArrayList инициализирует внутренний массив
  • При добавлении элементов сверх текущей емкости создается новый массив (обычно в 1.5-2 раза больше)
  • Происходит копирование элементов из старого массива в новый
  • Старый массив становится доступным для сборки мусора
// Пример с ArrayList
val list = ArrayList<Int>(10) // Внутренний массив размером 10
repeat(15) { index ->
    list.add(index) // При 11-м добавлении произойдет расширение внутреннего массива
}
println(list.size) // 15 - успешно добавили 15 элементов

Ключевые выводы

  • Массивы имеют фиксированный размер - это их фундаментальное свойство
  • Попытка записи за пределами массива вызывает ArrayIndexOutOfBoundsException
  • Для динамических структур данных используйте ArrayList, MutableList или другие коллекции
  • При необходимости "расширить" массив нужно создавать новый массив и копировать данные
  • Современные фреймворки и библиотеки Android предоставляют множество альтернатив, таких как LiveData, Flow, которые лучше подходят для динамических данных в UI-слое

Рекомендация для Android-разработки: В большинстве случаев предпочтительнее использовать List или MutableList вместо массивов, так как они предоставляют более безопасный и гибкий API для работы с коллекциями данных. Исключение составляют случаи, когда требуется максимальная производительность в критических по времени участках кода или при работе с нативными API, требующими именно массивов.