Arrays.sort (t [], Comparator <? Super T> C) Die Methode wird verwendet, um Objektarrays nach benutzerdefinierten Regeln zu sortieren.
Die offizielle Java -Dokumentation beschreibt nur kurz die Rolle dieser Methode und führt sie nicht im Detail ein. In diesem Artikel wird diese Methode eingehend analysiert.
1. Einfaches Beispiel
Die Verwendung der Sortiermethode ist sehr einfach und klar. Definieren Sie im folgenden Beispiel zuerst einen Komparator, der die Hundegröße vergleicht, und übergeben dann sein Instanzobjekt als Parameter an die Sortiermethode. In diesem Beispiel sollten Sie in der Lage sein, die Verwendung von Arrays.sort () schnell zu beherrschen.
import java.util.Arrays;import java.util.Comparator;class Dog{int size;public Dog(int s){size = s;}}class DogSizeComparator implements Comparator<Dog>{@Override public int compare(Dog o1, Dog o2) {return o1.size - o2.size;}}public class ArraySort {public static void main(String[] args) {Dog D1 = neuer Hund (2); Hund D2 = neuer Hund (1); Hund D3 = neuer Hund (3); Hund [] DogArray = {D1, D2, D3}; PrintDogs (Dogarray); Arrays.sort (Dogarray, New Dogizecparator (); Printdogs (Dogarray);} öffentlicher strukturierter Printdogs (Hunde) (Dogarray); System.out.print (d.size + ""); System.out.println ();}}Die Ausgabe ist:
2 1 3 1 2 3
2. Verwenden Sie den Richtlinienmodus
Dies ist ein perfektes und prägnantes Beispiel für das Strategiemuster. Es ist erwähnenswert, warum das Strategiemodell in diesem Szenario für die Verwendung geeignet ist.
Im Allgemeinen ermöglicht das Richtlinienmuster verschiedene Algorithmen, wenn das Programm ausgeführt wird. Zum Beispiel werden beim Sortieren verschiedene Vergleiche übergeben und verschiedene Algorithmen verwendet.
Angenommen, Sie möchten nach dem obigen Beispiel nach dem Gewicht des Hundes sortieren, können Sie einen neuen Komparator erstellen, der wie unten sortiert ist:
class Dog{int size;int weight;public Dog(int s, int w){size = s;weight = w;}}class DogSizeComparator implements Comparator<Dog>{@Override public int compare(Dog o1, Dog o2) {return o1.size - o2.size;}}class DogWeightComparator implements Comparator<Dog>{@Override public int compare(Dog o1, Dog o2) {return O1.gewicht - O2.gewicht;}} öffentliche Klasse Arraysort {public static void main (String [] args) {Hund d1 = neuer Hund (2, 50); Hund D2 = neuer Hund (1, 30); Hund D3 = neuer Hund (3, 40); Hund [] hundehund = {D1, D3, D3}; HundesizecomParator ()); PrintDogs (Dogarray); Arrays.sort (Dogarray, New DoggewichtComparator ()); PrintDogs (Dogarray);} öffentliche statische void PrintDogs (Hund [] Hunde) {für (Hunde D: Hunde) System.OUT.print ("size =" + d.ssize + " +" + " + D.Wirgs +" + " + D.Wirgs +". "); System.out.println ();}}Ausführungsergebnisse:
Größe = 2 Gewicht = 50 Größe = 1 Gewicht = 30 Größe = 3 Gewicht = 40 Größe = 1 Gewicht = 30 Größe = 2 Gewicht = 50 Größe = 3 Gewicht = 40 Größe = 1 Gewicht = 30 Größe = 3 Gewicht = 40 Größe = 2 Gewicht = 50
Comparator ist eine Schnittstelle, sodass die Sortiermethode in jeder Klasse passieren kann, die diese Schnittstelle implementiert, die die Hauptidee des Richtlinienmusters ist.
3.. Warum "super" verwenden
Es ist leicht zu verstehen, ob Sie "Comparator <t> c" verwenden, aber der <? Supert> im zweiten Sortierparameter bedeutet, dass der vom Komparator akzeptierte Typ T oder seine Superklasse sein kann. Warum ist es eine Superklasse? Die Antwort lautet: Dies ermöglicht den Vergleich verschiedener Subklassenobjekte unter Verwendung desselben Vergleichs. Dies wird im folgenden Beispiel deutlich nachgewiesen:
import java.util.Arrays;import java.util.Comparator;class Animal{int size;}class Dog extends Animal{public Dog(int s){size = s;}}class Cat extends Animal{public Cat(int s){size = s;}}class AnimalSizeComparator implements Comparator<Animal>{@Override public int compare(Animal o1, Animal o2) {return o1.size - o2.size;} // Auf diese Weise können alle Unterrichtsklassen von Tier diesen Vergleich verwenden.} öffentliche Klasse Arraysort {public static void main (String [] args) {Hund d1 = neuer Hund (2); Hund D2 = neuer Hund (1); Hund D3 = neuer Hund (3); Hund [] Dogarray = {D1, D1, D2, D2, D2, D2, D2, D2, D2, D2, D2, D2, D2, D2, D2, D2, D2, D2, D2, D2, D2, D2, D2, D2, D2, D2). d3}; printdogs (dogarray); arrays.sort (hundeArray, new AnimalsizecomParator ()); PrintDogs (Dogarray); System.out.println (); // Wenn Sie ein Array von Katze haben, kann derselbe Vergleich verwendet werden. Kat Cat C1 = neue Katze (2); Katze C2 = neue Katzen (1); Kat C3 = neue Katzen (3); Cat [] Catarray = {C1, C2, C3}; PrintDogs (Catarray); Arrays.sort (Catarray, neue Tieresecparator () Tiere (Catarray); System.out.print ("size =" + a.size + ""); System.out.println ();}}Ausgangsergebnis:
Größe = 2 Größe = 1 Größe = 3 Größe = 1 Größe = 2 Größe = 3 Größe = 3 Größe = 2 Größe = 1 Größe = 3 Größe = 1 Größe = 2 Größe = 3
4. Zusammenfassung
Die Informationen zu Arrays.sort () sind wie folgt zusammengefasst:
Allgemein: Super -Class -Strategie -Designmuster;
Sortierung zusammenführen: Zeitkomplexität n*log (n);
Java.util.Collections#sortieren (Liste <T> LISTE, Vergleiche <? Super T> c) verwendet eine ähnliche Idee wie Arrays.sort.
Zusammenfassen
Das obige ist alle detaillierte Erläuterungen des Codes der Arrays.sort () in Java. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere Java-bezogene Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!