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());
}
}
}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 5
Ein 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)));
}
}[1, 3, 5, 7, 9] [5, 3, 9, 1, 7] 3 false 25 9 5.0 [7, 7, 7, 7, 7] [3, 5]
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));
}
}[99, 2, 3] [1, 2, 3] true false false
Mehrdimensionale 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));
}
}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));
}
}[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
Aufgabe
Schreibe eine Methode, die aus einem int[] das zweitgrößte Element findet (ohne zu sortieren).