Was ist der Unterschied zwischen der Rückkehr 0
, Rückkehr 1
und Rückkehr -1
in compareTo()
in Java?
a-b
wenn a
es größer ist, ist das Ergebnis positiv (+1). Wenn b
es größer ist , ist das Ergebnis negativ ... wenn sie es sind gleich sein0
Was ist der Unterschied zwischen der Rückkehr 0
, Rückkehr 1
und Rückkehr -1
in compareTo()
in Java?
a-b
wenn a
es größer ist, ist das Ergebnis positiv (+1). Wenn b
es größer ist , ist das Ergebnis negativ ... wenn sie es sind gleich sein0
Antworten:
Aus den Referenzdokumenten von Comparable.compareTo (T) :
Vergleicht dieses Objekt mit dem angegebenen Objekt für die Bestellung. Gibt eine negative Ganzzahl, Null oder eine positive Ganzzahl zurück, da dieses Objekt kleiner, gleich oder größer als das angegebene Objekt ist.
Der Implementierer muss sgn (x.compareTo (y)) == -sgn (y.compareTo (x)) für alle x und y sicherstellen. (Dies impliziert, dass x.compareTo (y) eine Ausnahme auslösen muss, wenn y.compareTo (x) eine Ausnahme auslöst.)
Der Implementierer muss auch sicherstellen, dass die Beziehung transitiv ist: (x.compareTo (y)> 0 && y.compareTo (z)> 0) impliziert x.compareTo (z)> 0.
Schließlich muss der Implementierer sicherstellen, dass x.compareTo (y) == 0 impliziert, dass sgn (x.compareTo (z)) == sgn (y.compareTo (z)) für alle z.
Es wird dringend empfohlen, aber nicht unbedingt erforderlich, dass (x.compareTo (y) == 0) == (x.equals (y)). Im Allgemeinen sollte jede Klasse, die die Schnittstelle Comparable implementiert und diese Bedingung verletzt, diese Tatsache klar angeben. Die empfohlene Sprache lautet "Hinweis: Diese Klasse hat eine natürliche Reihenfolge, die nicht mit gleich übereinstimmt."
In der vorstehenden Beschreibung bezeichnet die Notation sgn (Ausdruck) die mathematische Signumfunktion, die so definiert ist, dass sie eine von -1, 0 oder 1 zurückgibt, je nachdem, ob der Wert des Ausdrucks negativ, null oder positiv ist.
Zusamenfassend:
this.compareTo(that)
kehrt zurück
wo die Implementierung dieser Methode die tatsächliche Semantik von <
>
und bestimmt ==
(ich meine nicht ==
im Sinne des Objektidentitätsoperators von Java)
"abc".compareTo("def")
ergibt etwas kleiner als 0, wie abc
es alphabetisch vorher ist def
.
Integer.valueOf(2).compareTo(Integer.valueOf(1))
ergibt etwas größer als 0, da 2 größer als 1 ist.
Hinweis: Für eine Klasse, die Comparable implementiert, empfiehlt es sich, die Semantik ihrer compareTo () -Methode in den Javadocs zu deklarieren.
Hinweis: Sie sollten mindestens eines der folgenden Dokumente lesen:
Achtung: Sie nie auf den Rückgabewert von compareTo Wesen verlassen sollen -1
, 0
und 1
. Sie sollten immer testen x < 0
, x == 0
, x > 0
, respectively.
sgn()
, nicht direkt -1 und 1. Sie sollten dies zu Ihrer Kurzversion hinzufügen.
Ich benutze diese Mnemonik:
a.compareTo(b) < 0 // a < b
a.compareTo(b) > 0 // a > b
a.compareTo(b) == 0 // a == b
Sie behalten die Zeichen und vergleichen das Ergebnis immer compareTo()
mit 0
a.compareTo(b) = a - b
.
a-b
sollte niemals in einer Implementierung von compareTo () in echtem Code verwendet werden, da es überlaufen kann (und wird).
Antworte kurz: (suche deine Situation)
Es kann zum Sortieren verwendet werden, und 0 bedeutet "gleich", während -1, und 1 bedeutet "weniger" und "mehr (größer)".
Jeder Rückgabewert, der kleiner als 0 ist, bedeutet, dass der linke Operand kleiner ist. Wenn der Wert größer als 0 ist, ist der linke Operand größer.
strcmp()
bei C.
int x = thisObject.compareTo(anotherObject);
Die compareTo()
Methode gibt ein int mit den folgenden Merkmalen zurück:
If thisObject < anotherObject
If thisObject == anotherObject
If thisObject > anotherObject
System.out.println (A.compareTo (B)> 0? "Ja": "Nein")
Wenn der Wert von A> B ist, wird "Ja" oder "Nein" zurückgegeben.