1. Einführung
Arrays in Java sind ein mächtiges Werkzeug, doch der Basissyntax stößt schnell an Routineaufgaben. Hier hilft die Klasse java.util.Arrays – eine Sammlung statischer Methoden zur Arbeit mit Arrays: Sortieren, Kopieren, Vergleichen, formatierte Ausgabe und mehr. Instanzen müssen nicht erstellt werden – alle Methoden sind statisch und werden über den Klassennamen aufgerufen.
Um die Methoden zu verwenden, fügen Sie am Anfang der Datei den Import hinzu:
import java.util.Arrays;
Wenn der Import fehlt, meldet der Compiler, dass Arrays „nicht gefunden“ ist – das ist kein Bug, sondern erwartetes Verhalten ohne Import.
2. Array sortieren: Arrays.sort
Wie Arrays.sort funktioniert
Syntax
Arrays.sort(array);
Arrays.sort(array, fromIndex, toIndex);
Die Methode sortiert in place – sie verändert das ursprüngliche Array und liefert kein neues zurück. Sie möchten die ursprüngliche Reihenfolge behalten? Kopieren Sie das Array zuerst.
Beispiel: Sortieren eines int-Arrays
int[] scores = {5, 2, 9, 1, 7};
Arrays.sort(scores); // Aufsteigend sortieren
System.out.println("Sortiertes Array: " + Arrays.toString(scores));
// Gibt aus: [1, 2, 5, 7, 9]
Beispiel: Sortieren eines String-Arrays
String[] names = {"John", "Peter", "Anne", "Rutger"};
Arrays.sort(names);
System.out.println(Arrays.toString(names));
// [Anne, Rutger, Peter, John]
Wichtig: Strings werden lexikografisch (alphabetisch) sortiert, Zahlen in aufsteigender Reihenfolge.
Sortieren eines Array-Ausschnitts
int[] arr = {7, 5, 3, 1, 9, 8};
Arrays.sort(arr, 1, 4); // sortiert die Elemente mit den Indizes 1 bis einschließlich 3 (4 ist exklusiv)
System.out.println(Arrays.toString(arr));
// [7, 1, 3, 5, 9, 8]
Besonderheiten
- In-place-Sortierung: Das ursprüngliche Array wird verändert.
- Zahlen: aufsteigend; Strings: alphabetisch.
- Für komplexe Objekte verwenden Sie die Überladungen mit Comparator.
3. Array auffüllen: Arrays.fill
Syntax
Arrays.fill(array, value);
Arrays.fill(array, fromIndex, toIndex, value);
Die Methode füllt alle Elemente oder den angegebenen Bereich des Arrays mit demselben Wert.
int[] marks = new int[5];
Arrays.fill(marks, 3); // Alle Elemente sind jetzt 3
System.out.println(Arrays.toString(marks)); // [3, 3, 3, 3, 3]
Einen Teil des Arrays auffüllen
int[] arr = new int[10];
Arrays.fill(arr, 2, 5, 7); // Füllt die Elemente mit den Indizes 2 bis einschließlich 4 (5 ist exklusiv)
System.out.println(Arrays.toString(arr));
// [0, 0, 7, 7, 7, 0, 0, 0, 0, 0]
Ein String-Array auffüllen
String[] guests = new String[4];
Arrays.fill(guests, "Leer");
System.out.println(Arrays.toString(guests)); // [Leer, Leer, Leer, Leer]
4. Array kopieren: Arrays.copyOf und Arrays.copyOfRange
Arrays.copyOf
Syntax
Arrays.copyOf(sourceArray, newLength);
Erstellt ein neues Array und kopiert Elemente aus dem ursprünglichen. Wenn die neue Länge größer als die ursprüngliche ist, wird das „Ende“ mit Standardwerten aufgefüllt (0 für int, null für Referenztypen).
int[] original = {1, 2, 3};
int[] copy = Arrays.copyOf(original, 5);
System.out.println(Arrays.toString(copy)); // [1, 2, 3, 0, 0]
Array verkleinern
int[] shortCopy = Arrays.copyOf(original, 2);
System.out.println(Arrays.toString(shortCopy)); // [1, 2]
Arrays.copyOfRange
Syntax
Arrays.copyOfRange(sourceArray, fromIndex, toIndex);
int[] arr = {10, 20, 30, 40, 50};
int[] mid = Arrays.copyOfRange(arr, 1, 4); // Kopiert die Elemente mit den Indizes 1 bis 3
System.out.println(Arrays.toString(mid)); // [20, 30, 40]
5. Arrays vergleichen: Arrays.equals und Arrays.deepEquals
In Java darf man Arrays nicht mit == vergleichen – damit vergleicht man Referenzen, nicht den Inhalt:
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a == b); // false!
Wie vergleicht man Inhalte?
Arrays.equals(array1, array2);
Arrays.deepEquals(matrix1, matrix2);
System.out.println(Arrays.equals(a, b)); // true
Für eindimensionale Arrays verwenden Sie Arrays.equals, für zwei- und mehrdimensionale – Arrays.deepEquals.
Beispiel: Vergleich zweidimensionaler Arrays
int[][] matrix1 = {{1, 2}, {3, 4}};
int[][] matrix2 = {{1, 2}, {3, 4}};
System.out.println(Arrays.equals(matrix1, matrix2)); // false!
System.out.println(Arrays.deepEquals(matrix1, matrix2)); // true
6. Schöne Ausgabe von Arrays: Arrays.toString und Arrays.deepToString
Gibt man ein Array direkt aus, erhält man eine unleserliche Zeichenkette:
int[] arr = {1, 2, 3};
System.out.println(arr); // [I@7a81197d
Syntax
Arrays.toString(array);
Arrays.deepToString(matrix);
System.out.println(Arrays.toString(arr)); // [1, 2, 3]
int[][] matrix = {{1, 2}, {3, 4}};
System.out.println(Arrays.deepToString(matrix)); // [[1, 2], [3, 4]]
7. Typische Fehler im Umgang mit der Klasse Arrays
Fehler Nr. 1: der Versuch, Arrays mit == zu vergleichen
Arrays sind Objekte, und == vergleicht nur Referenzen. Selbst bei gleichen Werten ist das Ergebnis false. Verwenden Sie Arrays.equals (für eindimensionale) oder Arrays.deepEquals (für mehrdimensionale Arrays).
Fehler Nr. 2: vergessen, dass Sortieren das Array in place verändert
Wenn Sie die ursprüngliche Reihenfolge benötigen, erstellen Sie zuerst mit Arrays.copyOf eine Kopie und sortieren Sie dann die Kopie. Andernfalls geht die Reihenfolge des Originals verloren.
Fehler Nr. 3: falsches Verständnis der Grenzen bei Arrays.fill und Arrays.copyOfRange
Die Methoden verwenden ein halboffenes Intervall: Der rechte Index ist exklusiv. Zum Beispiel füllt Arrays.fill(arr, 2, 5, 9) die Indizes 2, 3, 4; das Element mit Index 5 wird nicht berührt.
Fehler Nr. 4: der Versuch, ein Array direkt auszugeben
Der Aufruf System.out.println(arr) druckt eine technische Darstellung. Verwenden Sie Arrays.toString für eindimensionale und Arrays.deepToString für mehrdimensionale Arrays.
Fehler Nr. 5: mehrdimensionale Arrays mit Arrays.equals vergleichen
Die Methode vergleicht nur die oberste Ebene (Referenzen auf innere Arrays). Für den Inhalt verwenden Sie Arrays.deepEquals.
GO TO FULL VERSION