Dies ist ein Implementierungsdetail von ArrayList
.
ArrayList
wird von einem Array unterstützt. Ein Zugriff auf ein Array mit einem negativen Index wirft ArrayIndexOutOfBoundsException
, so dass es nicht explizit durch den Code ArrayList
Klasse getestet werden muss.
Auf der anderen Seite, wenn Sie Zugriff auf die ArrayList
mit einem nicht-negativen Index, der außerhalb des Bereichs der ist ArrayList
(dh> = die Größe der ArrayList
), eine spezifische Kontrolle in dem folgende Verfahren durchgeführt wird, die IndexOutOfBoundsException
wirft:
/**
* 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));
}
Diese Prüfung notwendig ist, da der zugeführte Index ein gültiger Index der Trägeranordnung sein kann (wenn sie kleiner als die aktuelle Kapazität des ArrayList
ist), so dass mit einem Index der Träger Array zugreift> = die Größe ArrayList
wird nicht unbedingt eine Ausnahme auslösen.
ArrayIndexOutOfBoundsException
ist eine Unterklasse von IndexOutOfBoundsException
, was bedeutet, es richtig ArrayList
‚s zu sagen ist get
Methode IndexOutOfBoundsException
für beide negative Indizes wirft und Indizes> = die Größe der Liste.
Beachten Sie, dass im Gegensatz zu ArrayList
, LinkedList
wirft IndexOutOfBoundsException
für sowohl negativen als auch nicht-negativen Indizes, da sie nicht von einem Array unterstützt wird, so dass es nicht auf einem Array verlassen kann eine Ausnahme für negative Indizes zu werfen:
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;
}
Ein sofort offensichtlicher Unterschied ist, dass "-1" niemals ein gültiger Index sein wird, während "1" (wenn eine Liste mindestens zwei Einträge hat). –
* ArrayIndexOutOfBoundException * ist eine Unterklasse von ** IndexOutOfBoundException ** - der wichtigste Punkt. Die andere Unterklasse ist * StringIndexOutOfBoundsException *. –