Емкость ArrayList
не совпадает с размером . Размер равен количеству элементов, содержащихся в ArrayList
(и любой другой реализации List
).
Емкость - это только длинабазовый массив, который используется для внутреннего хранения элементов ArrayList
и всегда больше или равен размеру списка.
При вызове set(index, element)
в списке,index
относится к фактическому количеству элементов списка (= размер) (который равен нулю в вашем коде, поэтому выбрасывается AIOOBE
), а не к длине массива (= емкость) (которая зависит от конкретной детали реализациив ArrayList
).
Метод set
является общим для всех реализаций List
, таких как LinkedList
, который фактически не реализуется массивом, а представляет собой связанную цепочку записей.
Редактировать : Вы фактически используете метод add(index, element)
, а не set(index, element)
, но принцип здесь тот же.