Почему размер массива в Java фиксирован после создания?

«Почему размер массива в Java фиксирован после создания?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Массивы в Java имеют фиксированный размер, потому что память под них выделяется непрерывным блоком при создании. Это обеспечивает константное время доступа O(1) к элементам по индексу, но делает невозможным изменение размера без пересоздания объекта.

Почему так спроектировано?

  • Производительность: Непрерывное расположение в памяти позволяет процессору эффективно кэшировать данные.
  • Простота: Управление памятью и вычисление смещения (array[index] = base_address + index * element_size) становятся тривиальными.

Альтернатива для динамического размера: Используйте ArrayList<T> (или другие реализации List), которые внутри управляют массивом и автоматически увеличивают его емкость при необходимости.

// Фиксированный размер
int[] fixedArray = new int[10];
fixedArray[0] = 5; // OK
// fixedArray.length = 20; // Невозможно

// Динамический размер
ArrayList<Integer> dynamicList = new ArrayList<>();
dynamicList.add(5); // Внутри может создаться новый массив и скопироваться данные