Heim >Java >javaLernprogramm >So implementieren Sie die Java-Listensortierfunktion

So implementieren Sie die Java-Listensortierfunktion

王林
王林nach vorne
2023-05-02 21:40:051153Durchsuche

Zu den im Java Collection Framework definierten Listenimplementierungen gehören Vector, ArrayList und LinkedList. Diese Sammlungen bieten indizierten Zugriff auf Gruppen von Objekten. Sie bieten Unterstützung beim Hinzufügen und Entfernen von Elementen. Sie verfügen jedoch nicht über eine integrierte Unterstützung für das Sortieren von Elementen.
Sie können Listenelemente mit der Methode sort() in der Klasse java.util.Collections sortieren. Sie können der Methode ein List-Objekt oder eine List und einen Comparator übergeben. Wenn die Elemente in der Liste alle vom gleichen Typ sind und die Klasse die Comparable-Schnittstelle implementiert, können Sie einfach Collections.sort() aufrufen. Wenn diese Klasse keinen Comparator implementiert, können Sie zum Sortieren auch einen Comparator an die Methode sort() übergeben. Wenn Sie nicht die Standardsortierreihenfolge verwenden möchten, können Sie zum Sortieren auch einen Comparator an die Methode sort() übergeben. Wenn die Elemente in der Liste nicht alle vom gleichen Typ sind, wird man beim Sortieren nicht so viel Glück haben. Es sei denn, Sie schreiben einen speziellen klassenübergreifenden Komparator.

Wie ist die Sortierreihenfolge? Wenn das Element ein String-Objekt ist, basiert die Sortierreihenfolge auf der Zeichenkodierung, die im Wesentlichen dem ASCII/Unicode-Wert jedes Zeichens entspricht. Wenn die strikte Einschränkung darin besteht, Englisch zu behandeln, ist die weggelassene Sortierreihenfolge normalerweise ausreichend, da zuerst A-Z und dann die Kleinbuchstaben a-z sortiert werden. Wenn Sie es jedoch mit nicht-englischen Wörtern zu tun haben oder einfach eine andere Sortierreihenfolge verwenden möchten, gibt es eine zweite Variante von Collections.sort(). Sie möchten beispielsweise Zeichenfolgen in umgekehrter Reihenfolge sortieren. Um diese Funktion zu erreichen, können Sie über reverseOrder() in der Collections-Klasse einen Komparator mit umgekehrter Reihenfolge erhalten. Anschließend übergeben Sie den umgekehrten Komparator an die Methode sort(). Mit anderen Worten, Sie gehen wie folgt vor: Wenn die Liste die Elemente „Mann“, „Mann“, „Frau“ und „Frau“ enthält, lautet die sortierte Liste „Mann“, „Frau“, „Mann“, „Frau“. Hier gibt es nichts Kompliziertes. Ein sehr wichtiger Punkt ist, dass Collections.sort() eine direkte Sortierung durchführt. Wenn Sie die ursprüngliche Reihenfolge beibehalten möchten, müssen Sie zuerst die ursprüngliche Sammlung kopieren und sie dann wie folgt sortieren:

#🎜🎜 #
<p>List list = ...;<br>Comparator comp = Collections.reverseOrder();<br>Collections.sort(list, comp);</p>
Hier ist die sortierte Liste: Mann, Frau, Mann, Frau, aber die ursprüngliche Liste (Mann, Mann, Frau, Frau) bleibt erhalten.

Bei der Sortierung wird bisher die Groß-/Kleinschreibung beachtet. Wie führt man eine Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung durch? Eine Möglichkeit, dies zu implementieren, besteht darin, den Comparator wie folgt zu implementieren: #Sie müssen diese Klasse wirklich nicht manuell erstellen. Stattdessen können Sie den vorhandenen Comparator CASE_INSENSIVTIVE_ORDER verwenden, der in der String-Klasse definiert ist. Bei dieser Implementierung gibt es ein kleines Problem. Der Sort()-Algorithmus sorgt für eine stabile Sortierung und behält die gleichen Elemente wie die Originalsequenz bei. Das bedeutet, dass eine Liste, die zwei Elemente „Frau“ und „Frau“ enthält, unterschiedlich geordnet wird und dieser Unterschied durch die Reihenfolge bestimmt wird, in der die beiden Elemente in der Liste erscheinen. Beachten Sie, dass Sie, wenn Ihr Text in der lokalen Sprache statt in der Standardsprache vorliegt, eine lokale Sprache an die getInstance()-Methode übergeben müssen, wie zum Beispiel: # 🎜🎜 #
Was passiert, wenn die Sprache anders ist? Das Paket java.text stellt die Klassen Collector und CollectionKey für die sprachabhängige Sortierung bereit. Hier ist ein Beispiel:

<p>List list = ...;<br>List copyOfList = new ArrayList(list);<br>Collections.sort(copyOfList);</p>

Sie sortieren den Sammlungsschlüssel, nicht die eigentliche Zeichenfolge. Dies ermöglicht nicht nur eine feste Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung, sondern auch eine sprachübergreifende Sortierung. Mit anderen Worten: Wenn Sie eine Mischung aus spanischen und nicht-spanischen Wörtern sortieren würden, würde das Wort mañana (morgen) vor mantra stehen. Wenn Sie Collector nicht verwenden, wird Mañana hinter Mantra eingefügt. Das folgende Programm führt verschiedene Arten der Sortierung einer Liste durch (Standard, Groß-/Kleinschreibung, Spracherkennung):

#🎜🎜 #

<p>public static class CaseInsensitiveComparator <br>implements Comparator {<br>public int compare(Object element1, <br>Object element2) {<br>String lower1 = <br>element1.toString().toLowerCase();<br>String lower2 = <br>element2.toString().toLowerCase();<br>return lower1.compareTo(lower2);<br>}<br>}</p>

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Java-Listensortierfunktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen