Quelle est la différence entre renvoyer 0
, Renvoyer 1
Et renvoyer -1
Dans compareTo()
en Java?
À partir des documents de référence de Comparable.compareTo (T) :
Compare cet objet avec l'objet spécifié pour la commande. Retourne un entier négatif, zéro ou un entier positif car cet objet est inférieur, égal ou supérieur à l'objet spécifié.
L'implémenteur doit s'assurer que sgn (x.compareTo (y)) == -sgn (y.compareTo (x)) pour tous les x et y. (Cela implique que x.compareTo (y) lève une exception si et seulement y.compareTo (x) lève une exception.)
L'implémenteur doit également s'assurer que la relation est transitive: (x.compareTo (y)> 0 && y.compareTo (z)> 0) implique x.compareTo (z)> 0.
Enfin, l'implémenteur doit s'assurer que x.compareTo (y) == 0 implique que sgn (x.compareTo (z)) == sgn (y.compareTo (z)), pour tout z.
Il est fortement recommandé, mais pas strictement requis que (x.compareTo (y) == 0) == (x.equals (y)). De manière générale, toute classe qui implémente l'interface Comparable et qui viole cette condition doit clairement indiquer ce fait. Le langage recommandé est "Remarque: cette classe a un ordre naturel incompatible avec les égaux."
Dans la description qui précède, la notation sgn (expression) désigne la fonction de signum mathématique, qui est définie pour renvoyer l’un des éléments suivants: -1, 0 ou 1, selon que la valeur de l’expression est négative, nulle ou positive.
En bref:
this.compareTo(that)
résultats
où l'implémentation de cette méthode détermine la sémantique réelle de <
>
et ==
(Je ne veux pas dire ==
au sens de l'opérateur d'identité d'objet de Java)
"abc".compareTo("def")
donnera un résultat inférieur à 0 car abc
est alphabétiquement avant def
.
Integer.valueOf(2).compareTo(Integer.valueOf(1))
produira quelque chose de plus grand que 0 parce que 2 est plus grand que 1.
Remarque: Il est judicieux pour une classe qui implémente Comparable de déclarer la sémantique de sa méthode compareTo () dans les javadocs.
Remarque: vous devez lire au moins l'un des éléments suivants:
Attention: vous ne devez jamais vous fier aux valeurs de retour de compareTo étant -1
, 0
et 1
. Vous devriez toujours tester pour x < 0
, x == 0
, x > 0
, respectivement.
J'utilise ce mnémonique:
a.compareTo(b) < 0 // a < b
a.compareTo(b) > 0 // a > b
a.compareTo(b) == 0 // a == b
Vous conservez les signes et comparez toujours le résultat de compareTo()
à 0
Réponse en bref: (recherche de votre situation)
prendre exemple si on veut comparer "a" et "b", c'est-à-dire ("a" == this)
Il peut être utilisé pour le tri et 0 signifie "égal", tandis que -1 et 1 signifient "moins" et "plus (plus grand)".
Toute valeur de retour inférieure à 0 signifie que l'opérande de gauche est inférieur. Si la valeur est supérieure à 0, l'opérande de gauche est supérieure.
int x = thisObject.compareTo(anotherObject);
La méthode compareTo()
renvoie un int avec les caractéristiques suivantes:
If thisObject < anotherObject
If thisObject == anotherObject
If thisObject > anotherObject