Вызов, что конструктор просто указывает начальную емкость, но не оказывает никакого влияния на размер ArrayList (размер всегда будет ноль, пока вы не добавите что-нибудь). Это объясняется в docs, а также свидетельствуют распечатки, что ArrayList:
ArrayList<Integer> gridList = new ArrayList<Integer>(9);
System.out.println(gridList);
Output: []
Если вы хотите инициализировать ArrayList с 9 Целые (например, девять нулей), попробуйте это «convenience implementation»:
ArrayList<Integer> gridList = new ArrayList<Integer>(Collections.nCopies(9, 0));
System.out.println(gridList);
Output: [0, 0, 0, 0, 0, 0, 0, 0, 0]
Как вы можете видеть, это заполняет ArrayList значениями во время инициализации, поэтому вы можете теперь звонить gridList.add(5, 2);
без IndexOutOfBoundsException
.
Количество, которое вы даете, это * емкость *, а не размер. Емкость - это количество элементов, которые вы можете добавить, без изменения базовой структуры данных, т. Е. Сколько вы ожидаете от List, а не того, что у нее есть. –