En java, que signifient les valeurs de retour de Comparable.compareTo?

Quelle est la différence entre return 0, return 1 et return -1 in compareTo () en Java? ..

Définition officielle

À partir des documents de référence de Comparable.compareTo (T) :

Compare cet object avec l’object spécifié pour la commande. Renvoie un entier négatif, zéro ou un entier positif car cet object est inférieur, égal ou supérieur à l’object spécifié.

Le réalisateur doit assurer sgn (x.compareTo (y)) == -sgn (y.compareTo (x)) pour tous les x et y. (Cela implique que x.compareTo (y) doit lancer une exception ssi y.compareTo (x) lance 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 ssortingctement requirejs que (x.compareTo (y) == 0) == (x.equals (y)). En règle générale, toute classe qui implémente l’interface Comparable et viole cette condition doit clairement l’indiquer. Le langage recommandé est “Note: 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’une de -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
  • 0 si cela == que
  • un int positif si cela> cela

où l’implémentation de cette méthode détermine la sémantique réelle de < > et == (je ne veux pas dire == dans le sens de l'opérateur d'identité d'object de java)

Exemples

 "abc".compareTo("def") 

produira quelque chose de plus petit que 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

Note: Il est recommandé 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:

  • la section Commande d'object du chemin de collecte dans le tutoriel Sun Java
  • Java efficace par Joshua Bloch, en particulier le point 12: envisager de mettre en œuvre
  • Génériques et collections Java de Maurice Naftalin, Philip Wadler, chapitre 3.1: Comparable

Attention: vous ne devez jamais compter sur les valeurs de retour de compareTo qui sont -1 , 0 et 1 . Vous devez toujours tester x < 0 , x == 0 , x > 0 , respectivement.

J’utilise cette 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: (recherchez votre situation)

  • 1 .compareTo ( 0 ) ( retour : 1 )
  • 1 .compareTo ( 1 ) ( retourner : 0 )
  • 0 .comapreTo ( 1 ) ( retourner : -1 )

Prenons l’exemple si nous voulons comparer “a” et “b”, c’est-à-dire (“a” == this)

  1. int négatif si
  2. si un == b
  3. Positif int si a> b

Il peut être utilisé pour le sorting et 0 signifie “égal” tandis que -1 signifie “moins” et “plus (plus)”.

Toute valeur de retour inférieure à 0 signifie que l’opérande gauche est inférieur et que si la valeur est supérieure à 0, l’opérande gauche est plus grand.

 int x = thisObject.compareTo(anotherObject); 

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

  • négatif If thisObject < anotherObject
  • zero If thisObject == anotherObject
  • positive If thisObject > anotherObject