web-dev-qa-db-fra.com

Que signifient les valeurs de retour de Comparable.compareTo en Java?

Quelle est la différence entre renvoyer 0, Renvoyer 1 Et renvoyer -1 Dans compareTo() en Java?

63
Magggi

Définition officielle

À 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.

Ma version

En bref:

this.compareTo(that)

résultats

  • un int négatif si cela <cela
  • 0 si ceci == cela
  • un int positif si ceci> cela

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)

Exemples

"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.

Quelques points supplémentaires

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.

82
Sean Patrick Floyd

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

45
Colin Hebert

Réponse en bref: (recherche de votre situation)

  • 1. CompareTo () ( renvoie : 1)
  • 1. CompareTo (1) ( renvoie : )
  • . ComapreTo (1) ( return : - 1 )
24
user1012506

prendre exemple si on veut comparer "a" et "b", c'est-à-dire ("a" == this)

  1. int négatif si a <b
  2. si a == b
  3. Int positif si a> b
5
bhavesh

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.

3
Michał Niklas
int x = thisObject.compareTo(anotherObject);

La méthode compareTo() renvoie un int avec les caractéristiques suivantes:

  • négatif If thisObject < anotherObject
  • zéro If thisObject == anotherObject
  • positif If thisObject > anotherObject
2
Artur Yolchyan