Sortierung in Java unter der Annahme: Vergleichbare und Vergleicher. Vergleichbar erstellt eine natürliche Reihenfolge Ihrer Elemente, je nach den gewünschten Kriterien. Comparator kann verwendet werden, um mehrere Bestellungen Ihrer Daten zu haben.
Beim Sortieren einer Java-Sammlung über die von einer Handvoll Sammlungen bereitgestellte Methode sort
können Sie einen bestimmten Vergleicher verwenden. Wenn Sie nichts angeben, wird die Sammlung nach der natürlichen Reihenfolge Ihrer Objekte sortiert (über Vergleichbar).
Schauen wir uns jetzt die Implementierung dieser Dinge an.
Vergleichbare Version
public class Route implements Comparable<Route> {
private String apr;
private int distance;
private int profit;
@Override
public int compareTo(Route other) {
int aprCompare = apr.compareTo(other.apr);
if (aprCompare != 0) return aprCompare;
else if (profit < other.profit) return -1;
else if (profit > other.profit) return 1;
else if (distance < other.distance) return -1;
else if (distance > other.distance) return 1;
else return 0;
}
}
Vergleicher Version
Ein Komparator ist ein Objekt, das die Bestellung für Sie tut. Per Konvention unterscheidet sich ein Komparator von der Klasse, die er vergleicht. Also, lassen Sie uns einen schreiben:
public class RouteComparator implements Comparator<Route> {
@Override
public int compare(Route a, Route b) {
int aprCompare = a.getApr().compareTo(b.getApr());
if (aprCompare != 0) return aprCompare;
else if (a.getProfit() < b.getProfit()) return -1;
else if (a.getProfit() > b.getProfit()) return 1;
else if (a.getDistance() < b.getDistance()) return -1;
else if (a.getDistance() > b.getDistance()) return 1;
else return 0;
}
}
Sortieren einer Liste
Sagen Sie ein paar unsortierte Daten in Ihrer Liste haben, und Sie müssen es sortieren, bevor neue einführen. Um eine List<Rout> list
mit der Vergleichsschnittstelle zu sortieren, rufen Sie einfach list.sort(null)
. Wenn Sie einen Komparator verwenden möchten, rufen Sie list.sort(new RouteComparator())
. Einfach, Ihre Liste ist effizient sortiert.
Wie zum Einfügen von Daten, während die Ordnung zu halten
Diese Liste ist, so ist der einfachste Weg zum Einfügen von Daten ist unter Beibehaltung bestellt ist es um die Liste zu durchlaufen, bis Sie eine Lücke finden, und legen Sie die neue Route
in dieser Lücke. Wenn Sie eine ArrayList
verwenden, können Sie dies effizienter durchführen, indem Sie eine binäre Suche implementieren, um nach der Lücke zu suchen.
Wenn Sie jedoch nicht an die Verwendung einer Liste gebunden sind und Ihre Routen eindeutig sind, können Sie ein TreeSet verwenden, bei dem es sich um eine geordnete Datenstruktur handelt.Was ist großartig ist, dass es auch Comparable Comparator verwendet, müssen Sie nur angeben, während Sie es erstellen:
TreeSet<Route> t = new TreeSet<>();
// Creates a new TreeSet with the natural ordering of Route
TreeSet<Route> t = new TreeSet<>(new RouteComparator());
// Creates a new TreeSet using a Comparator
Haben Sie versucht, irgendetwas in Bezug auf Code? –
Welche Sprache möchten Sie verwenden? (Wenn überhaupt?) –
Ich habe über Code nachgedacht, konnte aber noch nichts finden. Ich schreibe in Eclipse (Java 1.8) @HopefulLlama –