Il m'est arrivé de tomber sur de nombreuses déclarations telles que comparable est utilisé lorsqu'un ordre naturel est requis lors du tri d'un tableau ou d'une collection et d'un comparateur pour un ordre total.
La version de ce que vous avez entendu peut être identique ou différente, avec le même sens, mais en fin de compte, il s’agit de l’un des facteurs distinctifs entre les deux (interface de comparaison et interface comparable).
Mais, nulle part je ne pourrais trouver de différence entre les deux types de commande ... Si quelqu'un peut l'expliquer avec un bon exemple, il sera très apprécié :)
L'ordre total signifie que toutes les valeurs peuvent être comparées à toutes les autres valeurs. Par exemple, si vous avez une collection de BigDecimal
et String
, il n'y a pas d'ordre total naturel (mais vous pouvez en inventer un)
En Java, l'ordre naturel est défini comme l'ordre fourni par la machine virtuelle Java. Cela pourrait ne pas correspondre à ce qu'un peuple pourrait croire être l'ordre naturel. par exemple. Les chaînes sont triées ASCIIbétiquement. signification Z
vient avant a
et 10
est avant 2
http://docs.Oracle.com/javase/7/docs/api/Java/lang/Comparable.html
Cette interface impose un ordre total aux objets de chaque classe qui l'implémente. Cet ordre est appelé ordre naturel de la classe, et la méthode compareTo de la classe est appelée méthode de comparaison naturelle.
Total ordering est un concept mathématique général. Il diffère principalement de l'ordre partiel en ce que pour chaque a et b de l'ensemble X, "a <= b" ou "b <= a "sont significatifs et vrais. En ce qui concerne Java, cela signifie que sur deux instances Comparable
, l'une doit être supérieure ou égale à l'autre (c'est-à-dire qu'il est logique de les comparer).
Point important: naturel l'ordre doit être cohérent avec égal !
Résumé: l'ordre naturel est un type d'ordre total qui est utilisé par défaut (utilisé le plus souvent) pour la classe donnée et qui est cohérent avec égal. L'ordre total est tout ordre où toutes les valeurs peuvent être comparées à toutes les autres valeurs.
par exemple. lorsque vous concevez une nouvelle classe, vous pouvez choisir l'ordre naturel dans la classe. Toute autre commande ne peut alors être que la totalité;)
Ordre naturel
Cela dépend de nos collections que nous utilisons, par exemple, nous avons des objets object. Ensuite, l'ordre naturel correspond à leurs valeurs unicode. Pour les nombres, l'ordre naturel est comme d'habitude, par ordre croissant.
Comparable Interface - Cette interface impose un ordre total aux objets de chaque classe qui l'implémente. Cet ordre est appelé ordre naturel de la classe, et la méthode compareTo de la classe est appelée méthode de comparaison naturelle.
Les listes (et les tableaux) d'objets qui implémentent cette interface peuvent être triées automatiquement par Collections.sort (et Arrays.sort). Les objets qui implémentent cette interface peuvent être utilisés comme clés dans une carte triée ou des éléments dans un jeu trié, sans qu'il soit nécessaire de spécifier un comparateur.
public interface Comparable<T> {
/**
* Compares this object with the specified object for order. Returns a
* negative integer, zero, or a positive integer as this object is less
* than, equal to, or greater than the specified object.
*/
public int compareTo(T o);
}
Interface de comparaison:
Cette interface représente une relation d'ordre, qui peut être utilisée pour trier une liste ou maintenir l'ordre dans un ensemble ou une carte triés. Peut remplacer l'ordre naturel d'un type ou des objets d'ordre d'un type qui n'implémente pas l'interface Comparable.
Une fonction de comparaison, qui impose un ordre total à "certaines collections d'objets" . Les comparateurs peuvent être transmis à une méthode de tri (telle que Collections.sort) pour permettre un contrôle précis de l'ordre de tri. Les comparateurs peuvent également être utilisés pour contrôler l'ordre de certaines structures de données (telles que TreeSet ou TreeMap).
public interface Comparator<T> {
/**
* Compares its two arguments for order. Returns a negative integer,
* zero, or a positive integer as the first argument is less than, equal
* to, or greater than the second.
*/
int compare(T o1, T o2);
boolean equals(Object obj);
}
Hope This helps you.
Pour élaborer la réponse de @ Bruno: un exemple de commande partielle est la relation de divisibilité entre des nombres positifs. Si vous comparez 5 et 15, vous pouvez dire que 5 est un diviseur de 15 et 15 est le multiple de 5. Cependant, 3 et 5 ne sont pas comparables, car 3 n'est ni le diviseur ni le multiple de 5.
Un exemple de total ordering est la relation less que, car si vous prenez deux nombres différents, l'un d'eux est inférieur à l'autre. Donc, toute valeur est comparable à toute autre valeur.
Sur le concept de ordre naturel: Si les objets d'un type ont un moyen de tri vraiment très évident, alors c'est l'ordre naturel. Par exemple, l'ordre naturel des chaînes est l'ordre alphabétique, et l'ordre naturel des nombres est l'ordre croissant, car il s'agit du premier choix auquel on pourrait penser. Cependant, vous souhaiterez parfois commander les chaînes de manière différente, par exemple. trier par longueur des caractères à 1 caractère aux plus longs. Ceci est une commande totale possible sur Strings, mais pas naturelle.
Tous les objets n'ont pas nécessairement un ordre naturel. Par exemple. Si vous avez des objets Personne, les trier par hauteur est un ordre total possible, mais il en va de même par trier par âge ... Aucune de ces choses n'est plus évidente que l'autre, c'est pourquoi il n'y a pas d'ordre naturel.
L'ordre naturel est un ordre total par défaut. C'est la seule différence entre les deux.
Comparable
implémentations fournit un ordre naturel pour une classe, ce qui permet aux objets de cette classe d'être triés automatiquement. (Ref: https://docs.Oracle.com/javase/tutorial/collections/interfaces/order.html )
L'implémentation de l'interface Comparable
applique total ordering ou la possibilité de trier l'intégralité du tableau du début à la fin.