2016-05-07 8 views
1

Ich versuche zu verstehen, wie die vergleichbare compareTo Methode den Eingang sortiert. Unten ist die compareTo Methode implementiert:dosent verstehen, wie die Sortierung funktioniert

@Override 
public int compareTo(Name n) { 
    int lastCmp = lastName.compareTo(n.lastName); 
    return (lastCmp != 0 ? lastCmp : firstName.compareTo(n.firstName)); 
} 

Der Eingabe-Array zur Collections.sort Methode ist:

Name nameArray[] = { 
    new Name("John","Smith"), 
    new Name("Karl","Ng"), 
    new Name("Jeff","Smith"), 
    new Name("Tom","Rich") 
}; 
List<Name> names = Arrays.asList(nameArray); 
Collections.sort(names); 

Ich verstehe nicht, welche Werte in die compareTo Verfahren getroffen werden. (n.letzterName und Nachname) in welcher Reihenfolge?

+0

Die Sortiermethode Sammlungen sortiert Ihre Namensdaten basierend auf Ihrer compareTo-Methode. Die compareTo-Methode wird so oft wie nötig mit zwei Namensinstanzen aufgerufen, bis alle Namensinstanzen sortiert sind. In Ihrem Beispiel mit 4 Beispielen könnte die compareTo-Methode bis zu 6 Mal aufgerufen werden. –

Antwort

1

Die Collections.sort() -Methode verschiedene Algorithmen verwendet, auf der Sammel Länge und Art zu sortieren, je (ich glaube, ...)

Die Methode compareTo Negative zurückgeben sollte, 0 oder positive Ergebnisse, wenn das Objekt weniger -also, gleich oder größer als jeweils. Die Variable lastName verweist auf den Nachnamen in der Klasse Name, der aus firstName: String und lastName: String besteht.

Die Methode vergleicht zuerst den lastName (Objekt vom Typ String) mit dem lastName des übergebenen Objekts "n" (vom Typ Name). Wenn es anders als 0 ist (was nicht gleich ist), gebe diesen Wert zurück. Wenn es gleich ist, dann vergleiche den Vornamen und gib das zurück.

Es ist also nur der Vergleich der beiden Strings (firstName und lastName der Name-Objekte).

+0

public static Komparator StuRollno = new Vergleicher() { \t \t public int vergleichen (Student2 s1, s2 Student2) { \t \t \t int rollno1 = s1.getRollno(); \t \t \t int rollno2 = s2.getRollno(); \t \t \t \t \t \t // Für aufsteigend \t \t \t Rückkehr rollno1-rollno2; \t \t \t}}; in diesem code wie würde ich wissen, wenn rollno1-rollno2; Sortiert in aufsteigender oder absteigender Reihenfolge, da ich nicht weiß, was s1 und s2 sein wird, weil der Sammelalgorithmus anders ist? – user2892493

+0

@ user2892493: o1 - o2 ist aufsteigend, o2 - o1 ist absteigend, vorausgesetzt, o1 und o2 sind Ints. Die Leute, die die Java-Sortiermethoden geschrieben haben, waren ziemlich schlau und haben alle Ihre Bedenken berücksichtigt, als sie den Code geschrieben haben. Hier ist ein Experiment. Schreiben Sie Ihre eigene Sortiermethode **, ohne eine compareTo-Methode zu verwenden oder äquivalent **. Lassen Sie uns wissen, wenn Sie das Experiment abgeschlossen haben. –

+0

Gilbert: Ich bin mir nicht sicher, ob ich w @ ur sagen kann. Wie schreibe ich eine String-Sortiermethode ohne die compareTo-Methode? – user2892493

Verwandte Themen