Kurz: Ein Array speichert eine feste Anzahl gleichartiger Werte. Die Größe wird beim Anlegen festgelegt und kann sich danach nicht ändern. Der Index beginnt bei 0.
Teil des Kurses Java
Ein Array speichert eine feste Anzahl gleichartiger Werte. Die Größe wird beim Anlegen festgelegt und kann sich danach nicht ändern. Der Index beginnt bei 0.
import java.util.Arrays;
public class Felder {
public static void main(String[] args) {
int[] zahlen = {5, 3, 9, 1, 7}; // direkt mit Werten
String[] namen = new String[3]; // 3 Plätze, anfangs null
double[] preise = new double[4]; // anfangs 0.0
namen[0] = "Mia";
System.out.println(zahlen[0] + " " + zahlen[zahlen.length - 1] + " " + zahlen.length);
System.out.println(Arrays.toString(namen) + " " + Arrays.toString(preise));
zahlen[1] = 30;
System.out.println(Arrays.toString(zahlen));
try {
System.out.println(zahlen[5]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Fehler: " + e.getMessage());
}
}
}Ausgabe:
5 7 5
[Mia, null, null] [0.0, 0.0, 0.0, 0.0]
[5, 30, 9, 1, 7]
Fehler: Index 5 out of bounds for length 5Ein Zugriff außerhalb des Bereichs wirft eine ArrayIndexOutOfBoundsException.
Hilfsmethoden: Arrays
Die Klasse java.util.Arrays bietet die wichtigsten Werkzeuge:
| Methode | Wirkung |
|---|---|
Arrays.toString(a) | lesbare Ausgabe |
Arrays.sort(a) | sortieren (verändert a) |
Arrays.fill(a, wert) | alle Elemente setzen |
Arrays.copyOf(a, n), copyOfRange(a, von, bis) | kopieren |
Arrays.equals(a, b) | Inhalt vergleichen |
Arrays.binarySearch(a, x) | in sortiertem Array suchen |
Arrays.asList(...) | als Liste |
Arrays.stream(a) | als Stream |
import java.util.Arrays;
public class Werkzeuge {
public static void main(String[] args) {
int[] z = {5, 3, 9, 1, 7};
int[] kopie = Arrays.copyOf(z, z.length);
Arrays.sort(z);
System.out.println(Arrays.toString(z) + " " + Arrays.toString(kopie));
System.out.println(Arrays.binarySearch(z, 7) + " " + Arrays.equals(z, kopie));
System.out.println(Arrays.stream(z).sum() + " " + Arrays.stream(z).max().getAsInt() + " " + Arrays.stream(z).average().getAsDouble());
int[] b = new int[5];
Arrays.fill(b, 7);
System.out.println(Arrays.toString(b) + " " + Arrays.toString(Arrays.copyOfRange(z, 1, 3)));
}
}Ausgabe:
[1, 3, 5, 7, 9] [5, 3, 9, 1, 7]
3 false
25 9 5.0
[7, 7, 7, 7, 7] [3, 5]Achtung
int[] b = a;kopiert nur den Verweis. Beide Namen zeigen auf dasselbe Array. Eine echte Kopie liefertArrays.copyOfodera.clone().
import java.util.Arrays;
public class Verweis {
public static void main(String[] args) {
int[] a = {1, 2, 3};
int[] b = a;
int[] c = a.clone();
b[0] = 99;
System.out.println(Arrays.toString(a) + " " + Arrays.toString(c));
System.out.println(a == b);
System.out.println(a.equals(c) + " " + Arrays.equals(a, c));
}
}Ausgabe:
[99, 2, 3] [1, 2, 3]
true
false falseMehrdimensionale Arrays
import java.util.Arrays;
public class Matrix {
public static void main(String[] args) {
int[][] m = {
{1, 2, 3},
{4, 5, 6}
};
System.out.println(m[1][2] + " " + m.length + " " + m[0].length);
for (int[] zeile : m) System.out.println(Arrays.toString(zeile));
int[][] t = new int[3][2]; // Transponieren
for (int i = 0; i < m.length; i++)
for (int j = 0; j < m[i].length; j++)
t[j][i] = m[i][j];
System.out.println(Arrays.deepToString(t));
}
}Ausgabe:
6 2 3
[1, 2, 3]
[4, 5, 6]
[[1, 4], [2, 5], [3, 6]]Arrays sortieren nach eigener Regel
Für Objekt-Arrays gibt es Comparator:
import java.util.*;
public class Eigene {
public static void main(String[] args) {
String[] woerter = {"Banane", "Kiwi", "Apfel", "Zitrone"};
Arrays.sort(woerter);
System.out.println(Arrays.toString(woerter));
Arrays.sort(woerter, Comparator.comparing(String::length).thenComparing(Comparator.naturalOrder()));
System.out.println(Arrays.toString(woerter));
Arrays.sort(woerter, Collections.reverseOrder());
System.out.println(Arrays.toString(woerter));
}
}Ausgabe:
[Apfel, Banane, Kiwi, Zitrone]
[Kiwi, Apfel, Banane, Zitrone]
[Zitrone, Kiwi, Banane, Apfel]Array oder Liste?
Arrays haben feste Größe und sind schnell; für wachsende Daten ist die ArrayList (nächstes Kapitel) bequemer. In der Praxis nutzt man meist Collections und Arrays vor allem für primitive Daten, Puffer und Schnittstellen wie main(String[] args).
Merke
int[] a = new int[5]oder{1, 2, 3}; Index ab 0;a.lengthist die Größe- Außerhalb des Bereichs gibt es eine
ArrayIndexOutOfBoundsException Arrays.toString,sort,copyOf,fill,equalssind die wichtigsten Helfer- Zuweisung
b = akopiert nur den Verweis,clone()odercopyOfkopieren die Daten - Mehrdimensional:
int[][] m
Übungsaufgabe
Schreibe eine Methode, die aus einem int[] das zweitgrößte Element findet (ohne zu sortieren).
Quiz zur Selbstkontrolle
a?
- a.length - 1 (richtig)
- a.length
- a.size()
- -1
b = a?
- Nur den Verweis, beide zeigen auf dasselbe Array (richtig)
- Das ganze Array
- Nur die erste Hälfte
- Nichts
Wie gibst du ein Array lesbar aus?
- Arrays.toString(a) (richtig)
- System.out.println(a)
- a.print()
- a.toText()
Weiter im Kurs
Zurück: Methoden
Weiter: Collections: List, Set und Map
Alle Kapitel: Java im Überblick