ArrayList#get
, set
i najpierw wywołaj metodę rangeCheck
. Ta metoda nie sprawdza, czy indeks jest ujemny. Sprawdza tylko, czy indeks jest większy lub równy długości tablicy. Javadoc wyjaśnia przyczynę; dostęp do tablicy wyrzuca ArrayIndexOutOfBoundsException
, jeśli indeks jest ujemny.Dlaczego ArrayList # rangeCheck nie sprawdza, czy indeks jest ujemny?
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
public E get(int index) {
rangeCheck(index);
return elementData(index);
}
Według Java Langauage Specification An dostęp do tablicy zgłasza ArrayIndexOutOfBoundsException jeśli indeks jest nie tylko negatywne, ale również GTE.
Dostęp do wszystkich tablic jest sprawdzany w czasie wykonywania; próba użycia indeksu , która jest mniejsza niż zero lub większa lub równa długości tablicy powoduje wygenerowanie wyjątku ArrayIndexOutOfBoundsException.
Myślę, że funkcja rangeCheck powinna sprawdzać zarówno wartość ujemną, jak i parametr gte, a dla wydajności nie powinna sprawdzać. Dlaczego funkcja rangeCheck nie sprawdza, czy indeks jest ujemny?
Ponieważ nie musi. Później dostęp do macierzy już to robi. Jak mówi twój cytat. – EJP