EMZETT.
Login

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

Kapitel 9 von 22 im Kurs Java. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

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 5

Ein Zugriff außerhalb des Bereichs wirft eine ArrayIndexOutOfBoundsException.

Hilfsmethoden: Arrays

Die Klasse java.util.Arrays bietet die wichtigsten Werkzeuge:

MethodeWirkung
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 liefert Arrays.copyOf oder a.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 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));
    }
}

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.length ist die Größe
  • Außerhalb des Bereichs gibt es eine ArrayIndexOutOfBoundsException
  • Arrays.toString, sort, copyOf, fill, equals sind die wichtigsten Helfer
  • Zuweisung b = a kopiert nur den Verweis, clone() oder copyOf kopieren 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

Weiter im Kurs

Zurück: Methoden

Weiter: Collections: List, Set und Map

Alle Kapitel: Java im Überblick