Если самой первой операцией, выполняемой с ArrayList, является передача addAll
коллекции, содержащей более десяти элементов, то любые усилия, приложенные для создания исходного массива из десяти элементов для хранения содержимого ArrayList, будут выброшены из окна. Каждый раз, когда что-то добавляется в ArrayList, необходимо проверить, не превышает ли размер результирующего списка размер резервного хранилища; разрешение начальному резервному хранилищу иметь размер ноль, а не десять, приведет к тому, что этот тест потерпит неудачу еще один раз за время существования списка, первой операцией которого является «добавление», что потребует создания исходного массива из десяти элементов, но эта стоимость составляет меньше, чем стоимость создания массива из десяти элементов, который никогда не будет использоваться.
При этом в некоторых контекстах можно было бы дополнительно улучшить производительность, если бы была перегрузка addAll, в которой указывалось, сколько элементов (если есть), вероятно, будет добавлено в список после текущего, а какие могут используйте это, чтобы повлиять на его поведение распределения. В некоторых случаях код, который добавляет последние несколько элементов в список, будет иметь довольно хорошее представление о том, что списку никогда не понадобится дополнительное пространство. Есть много ситуаций, когда список заполняется один раз и больше не изменяется. Если в точке кода известно, что конечный размер списка будет 170 элементов, у него будет 150 элементов и резервное хранилище размером 160,