Arrays und Listen
Geordnete Sammlungen mit Index-Zugriff. Statisches Array (fixe Größe) vs dynamische Liste (ArrayList, list). Welche Operationen sind O(1), welche O(n)? Klausurwichtige Datenstruktur Nummer 1.
Statisches Array
Ein statisches Array hat eine feste Größe, die beim Anlegen festgelegt wird und sich danach nicht mehr ändert.
Größe steht fest. Du kannst Werte lesen und überschreiben, aber nicht hinzufügen oder löschen.
In Java ist das die klassische int[]-Notation. Python kennt diese Variante praktisch nicht — list ist dort immer dynamisch.
Anlegen und Zugreifen
// Größe direkt beim Anlegen festlegen
int[] noten = new int[5]; // [0, 0, 0, 0, 0]
// Mit Werten initialisieren
int[] tage = {31, 28, 31, 30, 31};
// Zugriff per Index
int erste = tage[0]; // 31
tage[1] = 29; // Schaltjahr — set
int laenge = tage.length; // 5 — feste LängeOperationen + Komplexität
| Operation | Java | Komplexität |
|---|---|---|
| get(i) — Element an Position lesen | arr[i] | O(1) |
| set(i, x) — Element an Position überschreiben | arr[i] = x | O(1) |
| length — Größe abfragen | arr.length | O(1) |
Beide Hauptoperationen sind O(1): das Array kennt seinen Speicheradressen-Anfang, und Position liegt direkt Bytes weiter. Der Computer kann sofort dahin springen.
Was nicht geht
- ❌ push / append: kein Hinzufügen
- ❌ pop / remove: kein Entfernen
- ❌ insert / unshift: kein Einfügen
- ❌ resize: keine Größenänderung
Wenn du diese Operationen brauchst, musst du auf eine dynamische Liste umsteigen. Mehr dazu im nächsten Tab.
Wann statische Arrays?
- Wenn die Größe vorher bekannt und fest ist (z.B. 12 Monate, 7 Wochentage)
- Wenn du maximale Performance und minimalen Speicher brauchst
- Bei Multi-dimensionalen Arrays (Matrizen) — meist als statische 2D-Arrays
- In der Algorithmik wenn die Anzahl der Elemente vorher feststeht
Probier es selbst
Index-Zugriff und set in Aktion. Beide Operationen O(1), keine Größenänderung möglich.
Klausur-Trick: arr.length (Java) ist kein Methodenaufruf, sondern eine Eigenschaft. Daher ohne Klammern. Bei Strings und ArrayList sind es dagegen Methoden mit Klammern: s.length(), list.size().