Ich habe ein List<String>
Objekt, das Ländernamen enthält. Wie kann ich diese Liste alphabetisch sortieren?
java
list
sorting
collections
alphabetical
Lennie
quelle
quelle
Antworten:
Angenommen, dies sind Strings, verwenden Sie die bequeme statische Methode
sort
…quelle
Lösung mit Collections.sort
Wenn Sie gezwungen sind, diese Liste zu verwenden, oder wenn Ihr Programm eine Struktur wie hat
dann ist Thilos Antwort der beste Weg, dies zu tun. Wenn Sie es mit dem Rat von Tom Hawtin - Tackline kombinieren , erhalten Sie:
Lösung mit einem TreeSet
Wenn Sie frei entscheiden können und Ihre Anwendung komplexer wird, können Sie Ihren Code ändern, um stattdessen ein TreeSet zu verwenden. Diese Art der Sammlung sortiert Ihre Einträge nur dann, wenn sie eingefügt werden. Sort () muss nicht aufgerufen werden.
Randnotiz, warum ich das TreeSet bevorzuge
Dies hat einige subtile, aber wichtige Vorteile:
TreeSet<String> countyNames
und weiß sofort: Dies ist eine sortierte Sammlung von Strings ohne Duplikate, und ich kann sicher sein, dass dies in jedem Moment zutrifft . So viele Informationen in einer kurzen Erklärung.Die Verwendung der richtigen Sammlung für die richtige Aufgabe ist ein Schlüssel zum Schreiben von kurzem und fehlerfreiem Code. Dies ist in diesem Fall nicht so demonstrativ, da Sie nur eine Zeile speichern. Aber ich habe aufgehört zu zählen, wie oft ich jemanden sehe, der eine Liste verwendet, wenn er sicherstellen möchte, dass keine Duplikate vorhanden sind, und diese Funktionalität dann selbst erstellt. Oder noch schlimmer: Verwenden Sie zwei Listen, wenn Sie wirklich eine Karte benötigen.
Versteh mich nicht falsch: Die Verwendung von Collections.sort ist kein Fehler oder Fehler. Es gibt jedoch viele Fälle, in denen das TreeSet viel sauberer ist.
quelle
Sie können mit Java 8 Stream oder Guava eine neue sortierte Kopie erstellen:
Eine weitere Option ist das Sortieren vor Ort über die Sammlungs-API:
quelle
Besser spät als nie! Hier ist, wie wir es tun können (nur zu Lernzwecken) -
quelle
In einer Zeile mit Java 8:
quelle
Verwenden Sie die beiden Argumente für von
Collections.sort
. Sie möchten eine geeigneteComparator
, die Groß- und Kleinschreibung behandelt (dh lexikalische, nicht UTF16-Reihenfolge), wie die, die über erhältlich istjava.text.Collator.getInstance
.quelle
Wenn Sie Zeichenfolgen nicht nur in akzentfreiem Englisch sortieren, möchten Sie wahrscheinlich a verwenden
Collator
. Es sortiert diakritische Zeichen korrekt, kann Groß- und Kleinschreibung und andere sprachspezifische Dinge ignorieren:Sie können die Stärke des Kollators einstellen , siehe Javadoc.
Hier ist ein Beispiel für Slowakisch, wohin
Š
es gehen sollS
, aber in UTFŠ
ist es irgendwo danachZ
:quelle
Hier ist was Sie suchen
quelle
Mit
Collections.sort()
können wir eine Liste sortieren.Ausgabe:
quelle
absteigendes Alphabet:
quelle
Gleiches gilt für JAVA 8: -
quelle
quelle
Sie können versuchen, eine Methode zu verwenden, die ich gemacht habe.
String key
- wird die gewünschte Reihenfolge sein und in diesem Fall in alphabetischer Reihenfolge. Setzen Sie einfach "abc ...".String list[]
- die Liste, die Sie mit dem Schlüssel ordnen möchten.int index
- als 0 gesetzt, setzt den Offset für die Taste.quelle