我想構建一個區間樹。在這一部分中,我必須按照升序排列所有左端點,並按升序排列所有右端點,並將它們放在單點列表中(不重複)。但是,當我嘗試將正確的端點合併到點列表中時,我不斷收到indexOutOfBounds異常。我已確保能力,以便這種情況不會發生,但無論如何它都會發生。我在這裏不瞭解什麼?Arraylist保持投擲IndexOutOfBounds
public static ArrayList<Integer> getSortedEndPoints(ArrayList<Interval> leftSortedIntervals, ArrayList<Interval> rightSortedIntervals) {
ArrayList<Integer> result = new ArrayList<Integer>();
for (int i = 0 ; i < leftSortedIntervals.size() ; i++) {
if (i >= 1 && leftSortedIntervals.get(i-1).leftEndPoint != leftSortedIntervals.get(i).leftEndPoint) {
result.add(leftSortedIntervals.get(i).leftEndPoint);
}
else if (i == 0) {
result.add(leftSortedIntervals.get(i).leftEndPoint);
}
}
result.ensureCapacity(rightSortedIntervals.size()*2);
for (int j = 0 ; j < rightSortedIntervals.size(); j++) {
boolean duplicate = false;
int size = result.size()-1;
int temp = rightSortedIntervals.get(j).rightEndPoint;
while (size >= 0 && result.get(size) >= rightSortedIntervals.get(j).rightEndPoint) {
if (result.get(size) == rightSortedIntervals.get(j).rightEndPoint) {
duplicate = true;
break;
}
else {
result.set(size+1, result.get(size));
size--;
}
}
if (duplicate = true) {
continue;
}
else {
result.add(size, temp);
}
}
return result;
}
錯誤發生在這條線:
else {
result.set(size+1, result.get(size));
size--;
}
你確定嗎?大小隻是一個整數值(我知道的命名不佳)。在這裏,我只是將所有內容都移到右側,爲我插入的端點騰出空間。 – biohax2015 2013-03-13 19:53:08
是的,我確定:http://docs.oracle.com/javase/6/docs/api/java/util/List.html#set(int,E):IndexOutOfBoundsException - 如果索引超出範圍(索引<0 || index> = size()) – 2013-03-13 19:55:06