Sorting
Kurz: Elemente einer Collection oder eines Arrays in eine bestimmte Reihenfolge bringen — Java bietet dafür fertige Methoden wie Collections.sort(liste) oder Arrays.sort(array).
Genauer: Für eigene Sortierreihenfolgen (z. B. nach einem bestimmten Feld eines Objekts statt der natürlichen Ordnung) übergibt man einen Comparator, entweder als eigene Klasse, Anonymous Class oder kompakt als Lambda-Ausdruck.
liste.sort((a, b) -> a.getName().compareTo(b.getName()));Im Detail
List<Person> personen = new ArrayList<>(List.of(
new Person("Bob", 25),
new Person("Anna", 30)
));
// Natürliche Ordnung, wenn Person Comparable<Person> implementiert:
Collections.sort(personen);
// Eigene Ordnung per Comparator, z. B. nach Alter statt Name:
personen.sort(Comparator.comparingInt(Person::getAlter));
// Mehrere Kriterien verketten: erst Alter, bei Gleichstand nach Name:
personen.sort(Comparator.comparingInt(Person::getAlter).thenComparing(Person::getName));Java-Arrays sortiert man über die statische Methode Arrays.sort(array), echte Collections wie List über Collections.sort(liste) oder — seit Java 8 kürzer — direkt über die Instanzmethode liste.sort(comparator). Intern nutzt Java für Objekte einen stabilen Sortieralgorithmus (eine Variante von Timsort, einer Mischung aus Merge Sort und Insertion Sort), der bei gleichwertigen Elementen deren ursprüngliche Reihenfolge beibehält — wichtig, wenn man wie oben nach mehreren Kriterien nacheinander sortiert. Für primitive Arrays (int[], double[] usw.) kommt dagegen ein Dual-Pivot-Quicksort zum Einsatz, der zwar schneller, aber nicht stabil ist — bei primitiven Werten spielt das aber keine Rolle, da es keine “gleichwertigen, aber unterscheidbaren” Elemente gibt.
Ein Objekt “sortierbar” zu machen geht auf zwei Arten: entweder die Klasse implementiert Comparable<T> und definiert damit EINE natürliche Standardordnung (z. B. Strings alphabetisch), oder man übergibt beim Sortieraufruf einen separaten Comparator, der beliebig viele alternative Ordnungen ermöglicht, ohne die Klasse selbst anzufassen.
Siehe auch: Advanced Sorting, Algorithms, Collections