Arrays in Java sortieren

1. Übersicht

In diesem Tutorial werden allgemeine Methoden zum Sortieren von Arrays in aufsteigender und absteigender Reihenfolge erläutert.

Wir werden uns die Verwendung der Arrays- Klassensortierungsmethode von Java sowie die Implementierung unseres eigenen Komparators ansehen , um die Werte unserer Arrays zu ordnen.

2. Objektdefinitionen

Bevor wir beginnen, definieren wir kurz einige Arrays, die wir in diesem Tutorial sortieren werden. Zuerst erstellen wir ein Array von Ints und ein Array von Strings:

int[] numbers = new int[] { -8, 7, 5, 9, 10, -2, 3 }; String[] strings = new String[] { "learning", "java", "with", "baeldung" };

Und lassen Sie uns auch eine Reihe von erstellen Mitarbeiter Objekte , bei denen jeder Mitarbeiter hat ID und ein Name Attribut:

Employee john = new Employee(6, "John"); Employee mary = new Employee(3, "Mary"); Employee david = new Employee(4, "David"); Employee[] employees = new Employee[] { john, mary, david };

3. Sortieren in aufsteigender Reihenfolge

Java util.Arrays.sort Methode bietet uns eine schnelle und einfache Art und Weise eine Reihe von Grundelementen zu sortieren oder Objekten, die die Umsetzung Vergleichbar in aufsteigender Reihenfolge Schnittstelle.

Beim Sortieren von Grundelementen verwendet die Arrays.sort- Methode eine Dual-Pivot-Implementierung von Quicksort. Beim Sortieren von Objekten wird jedoch eine iterative Implementierung von MergeSort verwendet.

3.1. Primitive

Um ein primitives Array in aufsteigender Reihenfolge zu sortieren, übergeben wir unser Array an die Sortiermethode :

Arrays.sort(numbers); assertArrayEquals(new int[] { -8, -2, 3, 5, 7, 9, 10 }, numbers); 

3.2. Objekte, die vergleichbar implementieren

Für Objekte, die die Schnittstelle Comparable implementieren, wie bei unserem primitiven Array, können wir unser Array auch einfach an die Sortiermethode übergeben :

Arrays.sort(strings); assertArrayEquals(new String[] { "baeldung", "java", "learning", "with" }, strings);

3.3. Objekte, die nicht vergleichbar sind

Um Objekte zu sortieren, die die vergleichbare Schnittstelle nicht implementieren , wie z. B. unser Array von Mitarbeitern , müssen wir unseren eigenen Komparator angeben.

In Java 8 können wir dies sehr einfach tun, indem wir die Eigenschaft angeben, mit der wir unsere Mitarbeiterobjekte in unserem Komparator vergleichen möchten :

Arrays.sort(employees, Comparator.comparing(Employee::getName)); assertArrayEquals(new Employee[] { david, john, mary }, employees);

In diesem Fall haben wir festgelegt, dass wir unsere Mitarbeiter nach ihren Namensattributen ordnen möchten .

Wir können unsere Objekte auch nach mehr als einem Attribut sortieren, indem wir unsere Vergleiche mit der thenComparing- Methode von Comparator verketten :

Arrays.sort(employees, Comparator.comparing(Employee::getName).thenComparing(Employee::getId));

4. Sortieren in absteigender Reihenfolge

4.1. Primitive

Das Sortieren eines primitiven Arrays in absteigender Reihenfolge ist nicht ganz so einfach wie das Sortieren in aufsteigender Reihenfolge, da Java die Verwendung von Komparatoren für primitive Typen nicht unterstützt . Um diesen Mangel zu beheben, haben wir einige Möglichkeiten.

Zuerst könnten wir unser Array in aufsteigender Reihenfolge sortieren und dann eine direkte Umkehrung des Arrays durchführen.

Zweitens könnten Sie unser Array in eine Liste konvertieren, die Lists.reverse () -Methode von Guava verwenden und dann unsere Liste wieder in ein Array konvertieren.

Schließlich könnten wir unser Array in einen Stream umwandeln und es dann wieder einem int- Array zuordnen . Es hat den schönen Vorteil, ein Einzeiler zu sein und nur Java zu verwenden:

numbers = IntStream.of(numbers).boxed().sorted(Comparator.reverseOrder()).mapToInt(i -> i).toArray(); assertArrayEquals(new int[] { 10, 9, 7, 5, 3, -2, -8 }, numbers);

The reason this works is that boxed turns each int into an Integer, which does implement Comparator.

4.2. Objects That Implement Comparable

Sorting an object array that implements the Comparable interface in descending order is quite simple. All we need to do is pass a Comparator as the second parameter of our sort method.

In Java 8 we can use Comparator.reverseOrder() to indicate that we would like our array to be sorted in descending order:

Arrays.sort(strings, Comparator.reverseOrder()); assertArrayEquals(new String[] { "with", "learning", "java", "baeldung" }, strings);

4.3. Objects That Don't Implement Comparable

Ähnlich wie beim Sortieren von Objekten, die vergleichbare implementieren, können wir die Reihenfolge unseres benutzerdefinierten Komparators umkehren, indem wir am Ende unserer Vergleichsdefinition reverse () hinzufügen :

Arrays.sort(employees, Comparator.comparing(Employee::getName).reversed()); assertArrayEquals(new Employee[] { mary, john, david }, employees);

5. Schlussfolgerung

In diesem Artikel wurde erläutert, wie Arrays von Grundelementen und Objekten mit der Methode Arrays.sort in aufsteigender und absteigender Reihenfolge sortiert werden.

Wie üblich finden Sie den Quellcode aus diesem Artikel auf Github.