這是ArrayList
的實施細節。
ArrayList
由數組支持。對具有負索引的數組的訪問會拋出ArrayIndexOutOfBoundsException
,因此不必通過ArrayList
類的代碼進行明確測試。
在另一方面,如果用非負折射率是的範圍外訪問ArrayList
的ArrayList
(即> =的ArrayList
的大小),特定的檢查,在下面的方法中,進行這拋出IndexOutOfBoundsException
:
/**
* Checks if the given index is in range. If not, throws an appropriate
* runtime exception. This method does *not* check if the index is
* negative: It is always used immediately prior to an array access,
* which throws an ArrayIndexOutOfBoundsException if index is negative.
*/
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
這檢查是必要的,因爲所提供的索引可以是背襯陣列的有效索引(如果它比ArrayList
的電流容量較小),所以訪問與索引背襯陣列> = ArrayList
的大小不一定會拋出異常。
ArrayIndexOutOfBoundsException
是子類的IndexOutOfBoundsException
,這意味着它是正確的說ArrayList
的get
方法對於這兩個負指數拋出IndexOutOfBoundsException
和指數> =列表的大小。
注意,不像ArrayList
,LinkedList
拋出IndexOutOfBoundsException
爲負和非負的指標,因爲它不是由數組支持,因此它不能依賴於一個陣列上扔負指數異常:
private void checkElementIndex(int index) {
if (!isElementIndex(index))
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
/**
* Tells if the argument is the index of an existing element.
*/
private boolean isElementIndex(int index) {
return index >= 0 && index < size;
}
一個非常明顯的區別是'-1'永遠不會是一個有效的索引,而'1'將是(如果一個列表至少有兩個條目)。 –
* ArrayIndexOutOfBoundException *是** IndexOutOfBoundException的子類** - 最重要的一點。另一個子類是* StringIndexOutOfBoundsException *。 –