У меня есть набор объектов, в которых мне нужен Итератор, который может проходить через объекты по порядку (как вперед, так и назад), но также может перейти к любому объекту при указании этого объекта (который представляет собой номер урока задания).Непоследовательный индексный сборник
Однако, индекс для каждого Объекта должен быть специально предопределен по порядку, и нет гарантии, что мой список объектов будет иметь последовательные индексы (например, я мог бы иметь индексы 0, 1, 6, 9) ,
В настоящее время у меня есть ArrayList(), который я создаю с помощью наибольшегоIndex, который я ожидаю, что возможно в качестве начальной емкости, но я все время получаю исключение ArrayIndexOutOfBounds всякий раз, когда я пытаюсь использовать метод add (index, Object) на моем ArrayList
мой код выглядит следующим образом:
int largestIndex = unindexedAssignments.get(unindexedAssignments.size() - 1).getAssignmentID();
//index of 0 is ignored so add +1 to make sure we have enough space
assignments = new ArrayList<>(largestIndex + 1);
System.out.println("LargestIndex: " + (largestIndex + 1));
//populate assignments List
for(Assignment assignment : unindexedAssignments) {
//add the assignment to the list such that the index == the lesson number
System.out.println("adding assignment with index of " + assignment.getAssignmentID());
assignments.add(assignment.getAssignmentID(), assignment);
}
и консоль выплевывает что-то вроде этого (окна cmdpromt не поддерживает копирования/вставки> _ <):
largestIndex: 3
adding assignment with index of 1
java.lang.IndexOutOfBoundsException: Index 1, Size: 0
at java.util.ArrayList.rangeCheckForAdd(Unkown Source)
at java.util.ArrayList.add(Unknown Source)
(the rest of the stack trace pointing to the section of code I gave above ...)
Я не понимаю, почему размер == 0, когда я создал то, что должно было быть ArrayList размером 4?
Связанный вопрос: я неправильно использую ArrayList (и это ListIterator), когда для этого обстоятельства лучше использовать сборку Java по умолчанию? Желательным конечным результатом является то, что у моего объекта есть объект Iterator, способный перемещаться назад и вперед и перейти к определенному местоположению (прямо сейчас я бы просто создал новый ListIterator по данному индексу, если он существует)
Вы должны опубликовать свое редактирование в качестве ответа. Ответ на ваш вопрос в порядке. Ура! –