Назад к вопросам
Junior
70
questionbank

Что такое capacity в контексте Java?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Capacity в контексте Java чаще всего относится к размеру внутренней структуры данных, например, массива, который используется для хранения элементов в коллекциях, таких как ArrayList, Vector или HashMap. Это максимальное количество элементов, которое коллекция может вместить без необходимости пересоздания и копирования внутреннего массива в больший.

  • Initial capacity: Начальный размер внутреннего массива при создании коллекции.
  • Current capacity: Текущий размер внутреннего массива. Он может быть больше, чем фактическое количество элементов (size), но не меньше.
  • Расширение емкости: Когда количество элементов достигает текущей емкости, коллекция автоматически увеличивает размер внутреннего массива (обычно на определенный коэффициент, например, в 1.5 раза для ArrayList), чтобы вместить новые элементы. Этот процесс может быть затратным по времени и ресурсам.

Управление емкостью может влиять на производительность:

  • Слишком маленькая начальная емкость ведет к частым расширениям, что снижает производительность при добавлении большого числа элементов.
  • Слишком большая начальная емкость может привести к неэффективному использованию памяти, если коллекция останется полупустой.

Пример для ArrayList:

// Создает ArrayList с начальной емкостью по умолчанию (обычно 10)
List<String> defaultCapacityList = new ArrayList<>();

// Создает ArrayList с начальной емкостью 50
List<String> customCapacityList = new ArrayList<>(50);

// Увеличивает емкость, если текущая емкость недостаточна
for (int i = 0; i < 100; i++) {
    defaultCapacityList.add("Element " + i); // Может вызвать несколько расширений
}

// Метод ensureCapacity() позволяет явно увеличить емкость заранее
defaultCapacityList.ensureCapacity(200);