EMZETT.
Login

Index

Kurz: Die Zählvariable, mit der eine Schleife oder ein Array-Zugriff die aktuelle Position durchzählt — in Java standardmäßig bei 0 beginnend.

Genauer: Arrays und die meisten Collections sind in Java nullbasiert: das erste Element steht am Index 0, das letzte an länge - 1. Ein Zugriff außerhalb dieses Bereichs (z. B. arr[arr.length]) wirft zur Laufzeit eine ArrayIndexOutOfBoundsException.

Im Detail

int[] zahlen = {10, 20, 30, 40, 50};
 
for (int i = 0; i < zahlen.length; i++) {
    System.out.println("Index " + i + ": " + zahlen[i]);
}
 
// Rückwärts iterieren - Index startet am Ende
for (int i = zahlen.length - 1; i >= 0; i--) {
    System.out.println(zahlen[i]);
}
 
// "Off-by-one"-Fehler: eine der häufigsten Fehlerquellen für Einsteiger
for (int i = 0; i <= zahlen.length; i++) { // <= statt < !
    System.out.println(zahlen[i]); // wirft bei i == 5 eine ArrayIndexOutOfBoundsException
}

Der “Off-by-one”-Fehler (Verwechslung von < und <= in der Abbruchbedingung) gehört zu den häufigsten Anfängerfehlern beim Arbeiten mit Indizes: weil das letzte gültige Element bei länge - 1 steht (nicht bei länge), muss die Bedingung i < länge lauten, nicht i <= länge. Bei For-Each-Schleifen (for (int zahl : zahlen)) entfällt dieses Problem komplett, weil kein Index manuell geführt wird — dafür hat man dort aber auch keinen direkten Zugriff auf die Position des aktuellen Elements, falls man sie braucht (dann bleibt nur die klassische indexbasierte Schleife oder ein zusätzlicher manueller Zähler).

Index in Collections vs. Arrays

Anders als bei Arrays gibt es bei Set und Map (aus dem Collections-Framework) KEINEN Index-Zugriff, da diese Datenstrukturen keine feste Reihenfolge garantieren. List dagegen verhält sich indexmäßig wie ein Array, nutzt aber Methoden statt eckiger Klammern:

List<String> liste = new ArrayList<>(List.of("a", "b", "c"));
String zweites = liste.get(1); // "b" - Index-Zugriff über get(), nicht liste[1]
liste.set(1, "B");              // Element an Index 1 ersetzen
int position = liste.indexOf("c"); // 2 - Position eines bekannten Werts finden

Ein ArrayIndexOutOfBoundsException gibt es bei List nicht — stattdessen wirft get() bei einem ungültigen Index eine IndexOutOfBoundsException (die gemeinsame Oberklasse beider spezifischeren Exceptions), was zeigt, dass Java bewusst zwischen dem historisch älteren Array-Zugriff und dem später eingeführten Collections-Framework unterscheidet, auch wenn beide konzeptionell nullbasiert indiziert sind.

Siehe auch: For-Schleife, Arrays, Exceptions