Array sortieren mit Java

Um mit Java ein Array zu sortieren kommt uns wie so oft die Klasse java.util.Arrays zu Hilfe. Diese enthält Methoden um ein Array oder einen Teil eines Arrays zu sortieren.

Inhaltsverzeichnis

Primitive Typen

Für die primitiven Datentypen wird in aufsteigender natürlicher Ordnung sortiert:

int[] intArray = {1, 5, 3, 7, 2, 9};
Arrays.sort(intArray);
System.out.println(Arrays.toString(intArray)); 
// Ausgabe: [1, 2, 3, 5, 7, 9]

Was die natürliche Ordnung bei Zahlen ist, ist ja einigermaßen klar. Bei Objekten ist das schon etwas komplizierter: Ist die "natürliche Ordnung" z.B. für Personen eine Sortierung nach Nachname, Vorname oder Geburtsdatum?

Objekte

Für Objekte ist so eine Ordnung nur dann vorgegeben, wenn es das Interface java.lang.Comparable implementiert. Die Klasse String implementiert das Interface, somit kann ein Array vom Typ String einfach sortiert werden:

String[] stringArray = {"Gustav", "Ludwig", "Heinrich"};
Arrays.sort(stringArray);
System.out.println(Arrays.toString(stringArray)); 
// Ausgabe: [Gustav, Heinrich, Ludwig]

Aber Achtung! Natürliche Ordnung bedeutet nicht gleichzeitig alphabetisch: Wenn Groß- und Kleinbuchstaben vermischt werden, kommen zuerst die Großbuchstaben und erst dann die Kleinbuchstaben:

String[] stringArray = {"Gustav", "Ludwig", "Heinrich", "arnold"};
Arrays.sort(stringArray);
System.out.println(Arrays.toString(stringArray)); 
// Ausgabe: [Gustav, Heinrich, Ludwig, arnold]

Es wird nämlich nicht wie erwartet alphabetisch verglichen, sondern basierend auf den Unicode-Werten der Zeichen im String (sie Klasse String in der Java API).

Sortieren mit einem Comparator

Alternativ kann der sort() Methode ein Comparator übergeben werden. Ein Comparator ist ein Objekt das eine Methode enthält die angibt, ob ein Objekt eines Typs als größer, kleiner oder gleich groß anzusehen ist wie ein anderes Objekt.

Das Problem mit den Strings die nicht alphabetisch sortiert werden, könnte man nun folgendermaßen lösen:

    Arrays.sort(stringArray, new Comparator<String>() {
        @Override
        public int compare(String first, String second) {
            return first.toLowerCase().compareTo(second.toLowerCase());
        }
    });
    System.out.println(Arrays.toString(stringArray)); 
// Ausgabe: [arnold, Gustav, Heinrich, Ludwig]

Ähnliche Artikel