我有一個對象的集合,我需要一個迭代器,它可以按順序(向前和向後)遍歷對象,但也可以在給定該對象的索引時轉到任何對象代表任務的課程編號)。非順序索引集合
但是,每個對象的索引都需要按順序進行特別的預定義,並且不能保證我的對象列表將具有順序索引(例如,我可以使用索引0,1,6,9) 。我目前有一個ArrayList(),我正在用最大的索引實例化,我期望可以作爲初始容量,但是當我嘗試在我的ArrayList上使用add(index,Object)方法時,我不斷收到ArrayIndexOutOfBounds異常
我的代碼看起來是這樣的:
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當我創建應該是一個大小爲4的ArrayList?
一個相關的問題:當我有一個更好的默認Java集合用於這種情況時,我濫用ArrayList(和它的ListIterator)嗎?期望的最終結果是我的對象有一個迭代器對象,它能夠來回遍歷併到達特定位置(現在,如果存在,我將在給定索引處創建新的ListIterator)
你應該發佈你的編輯作爲答案。回答你自己的問題很好。乾杯! –