Метод ArrayList.ensureCapacity() при необходимости увеличивает емкость данного экземпляра ArrayList, чтобы гарантировать, что он может вмещать по крайней мере количество элементов, указанное аргументом метода minCapacity.
Метод ensureCapacity() нам нужно использовать в случаях, когда в ArrayList имеется огромное количество операций add(). В таких случаях ArrayList будет часто изменять размер, а изменение размера списка — дорогостоящая операция.
1. Синтаксис
public void ensureCapacity(int minCapacity)
Если значение minCapacity меньше 10, что является емкостью ArrayList по умолчанию, то гарантированная емкость будет равна 10.
2. Почему изменение размера ArrayList требует больших затрат?
Java ArrayList внутренне использует объект-массив elementData, который используется для хранения элементов списка. Все методы ArrayList работают с этим elementData и элементами, хранящимися в нем.
открытый класс ArrayList<E> расширяет AbstractList<E>реализует List<E>, RandomAccess, Cloneable, java.io.Serializable{частный статический конечный int DEFAULT_CAPACITY = 10;переходный Объект[] elementData;//еще код...}
Вот почему ArrayList представляет собой упорядоченную коллекцию и обеспечивает доступ к элементам на основе индекса.
Обратите внимание, что массивы представляют собой коллекции фиксированного размера, тогда как ArrayList увеличивается во время выполнения по мере заполнения базового массива elementData и добавления в список дополнительных элементов.
Увеличение размера массива elementData называется изменением размера. Это изменение размера выполняется в два этапа:
- Создайте новый резервный массив большего размера, чем предыдущий массив.
- Скопировать все элементы из старого массива в новый массив.
Таким образом, перед добавлением нового элемента в ArrayList с помощью метода add(), ArrayList выполняет проверку того, осталось ли свободное место в резервном массиве, с помощью метода ensureCapacity().
Если в резервном массиве есть свободное место, то новый элемент добавляется в массив; в противном случае сначала создается новый резервный массив.
Подробнее: Исходный код ArrayList
3. Пример ArrayList ensureCapacity()
Программа Java для использования метода ensureCapacity() для увеличения размера ArrayList после его инициализации. В данном примере мы сначала создали ArrayList размером 2. Предположим, что мы хотим добавить в него еще 20 элементов, тогда во время добавления изменение размера произойдет несколько раз.
Первое изменение размера увеличит размер списка до 10. Затем последующие операции add() приведут к тому, что размер массива изменится еще несколько раз.
Чтобы избежать многократного изменения размера, мы можем вызвать метод ensureCapacity() с размером 25. Это освободит достаточно места в массиве для хранения всех дополнительных 20 элементов, которые мы собираемся добавить. Это улучшает общую производительность всей программы.
публичный класс ArrayListExample{public static void main(String[] args){ArrayList<> список = новый ArrayList<>(2);список.добавить("А");список.добавить("Б");System.out.println(список);список.ensureCapacity(25);список.добавить("С");список.добавить("D");список.добавить("E");System.out.println(список);}}
Вывод программы.
[А, Б][А, Б, В, Г, Д]
Подробнее: Документация по ArrayList Java