Überprüfen, ob eine Liste in Java sortiert ist

1. Übersicht

In diesem Tutorial sehen wir verschiedene Möglichkeiten, um zu überprüfen, ob eine Liste in Java sortiert ist .

2. Iterativer Ansatz

Der iterative Ansatz ist eine einfache und intuitive Möglichkeit, nach einer sortierten Liste zu suchen. Bei diesem Ansatz iterieren wir die Liste und vergleichen die benachbarten Elemente. Wenn eines der beiden benachbarten Elemente nicht sortiert ist, können wir sagen, dass die Liste nicht sortiert ist.

Eine Liste kann entweder in der natürlichen Reihenfolge oder in einer benutzerdefinierten Reihenfolge sortiert werden. Wir werden beide Fälle mithilfe von Comparable- und Comparator- Schnittstellen behandeln.

2.1. Verwenden von Comparable

Schauen wir uns zunächst ein Beispiel einer Liste an, deren Elemente vom Typ Vergleichbar sind . Hier betrachten wir eine Liste mit Objekten vom Typ String :

public static boolean isSorted(List listOfStrings) { if (isEmpty(listOfStrings) || listOfStrings.size() == 1) { return true; } Iterator iter = listOfStrings.iterator(); String current, previous = iter.next(); while (iter.hasNext()) { current = iter.next(); if (previous.compareTo(current) > 0) { return false; } previous = current; } return true; }

2.2. Mit Vergleicher

Nun lassen Sie uns einen betrachten Mitarbeiter Klasse, die es nicht implementieren Comparable . In diesem Fall müssen wir also einen Komparator verwenden , um die benachbarten Elemente der Liste zu vergleichen:

public static boolean isSorted(List employees, Comparator employeeComparator) { if (isEmpty(employees) || employees.size() == 1) { return true; } Iterator iter = employees.iterator(); Employee current, previous = iter.next(); while (iter.hasNext()) { current = iter.next(); if (employeeComparator.compare(previous, current) > 0) { return false; } previous = current; } return true; }

Die obigen zwei Beispiele sind ähnlich. Der einzige Unterschied besteht darin, wie wir die vorherigen und die aktuellen Elemente der Liste vergleichen.

Darüber hinaus können wir mit Comparator auch die Sortierprüfung präzise steuern . Weitere Informationen zu diesen beiden finden Sie in unserem Tutorial zu Comparator und Comparable in Java.

3. Rekursiver Ansatz

Nun werden wir sehen, wie Sie mithilfe der Rekursion nach einer sortierten Liste suchen:

public static boolean isSorted(List listOfStrings) { return isSorted(listOfStrings, listOfStrings.size()); } public static boolean isSorted(List listOfStrings, int index) { if (index  0) { return false; } else { return isSorted(listOfStrings, index - 1); } }

4. Verwenden von Guave

Es ist oft gut, eine Bibliothek eines Drittanbieters zu verwenden, anstatt unsere eigene Logik zu schreiben. Die Guava-Bibliothek verfügt über einige Dienstprogrammklassen, mit denen wir überprüfen können, ob eine Liste sortiert ist.

4.1. Guava Bestell Klasse

In diesem Abschnitt erfahren Sie, wie Sie mit der Ordering- Klasse in Guava nach einer sortierten Liste suchen.

Zunächst sehen wir ein Beispiel für eine Liste mit Elementen vom Typ Comparable :

public static boolean isSorted(List listOfStrings) { return Ordering. natural().isOrdered(listOfStrings); }

Als Nächstes sehen wir, wie wir mithilfe eines Komparators überprüfen können, ob eine Liste von Mitarbeiterobjekten sortiert ist :

public static boolean isSorted(List employees, Comparator employeeComparator) { return Ordering.from(employeeComparator).isOrdered(employees); }

Wir können auch natural (). ReverseOrder () verwenden , um zu überprüfen, ob eine Liste in umgekehrter Reihenfolge sortiert ist. Außerdem können wir natural (). NullFirst () und natural () verwenden . nullLast () , um zu überprüfen, ob null als erstes oder letztes der sortierten Liste angezeigt wird.

Um mehr über die Guava Ordering- Klasse zu erfahren, lesen Sie unseren Leitfaden zum Guava Ordering-Artikel.

4.2. Guaven- Komparator- Klasse

Wenn wir Java 8 oder höher verwenden, bietet Guava eine bessere Alternative in Bezug auf die Comparators- Klasse. Wir werden ein Beispiel für die Verwendung der isInOrder- Methode dieser Klasse sehen:

public static boolean isSorted(List listOfStrings) { return Comparators.isInOrder(listOfStrings, Comparator. naturalOrder()); }

Wie wir sehen können, haben wir im obigen Beispiel die natürliche Reihenfolge verwendet, um nach einer sortierten Liste zu suchen. Wir können auch einen Komparator verwenden , um die Sortierprüfung anzupassen.

5. Schlussfolgerung

In diesem Artikel haben wir gesehen, wie wir mithilfe eines einfachen iterativen Ansatzes, eines rekursiven Ansatzes und mithilfe von Guava nach einer sortierten Liste suchen können. Wir haben auch kurz auf die Verwendung von Comparator und Comparable bei der Entscheidung über die Sortierprüflogik eingegangen.

Die Implementierung all dieser Beispiele und Codefragmente finden Sie auf GitHub.