Comparable
Fermé
helloworld95
-
1 oct. 2018 à 23:28
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 3 oct. 2018 à 19:35
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 3 oct. 2018 à 19:35
1 réponse
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
2 oct. 2018 à 08:58
2 oct. 2018 à 08:58
Bonjour,
D'une manière ou d'une autre, pour ranger les éléments "dans l'ordre" (ce qui peut être très subjectif selon les objets que tu manipules), Java doit savoir comment comparer deux objets pour déterminer lequel des deux est le plus petit.
Il y a deux manière de faire :
Remarque : depuis Java 8 on pourra s'aider des méthodes Comparator.comparing (& co) qui construisent des comparateurs à la volée.
D'une manière ou d'une autre, pour ranger les éléments "dans l'ordre" (ce qui peut être très subjectif selon les objets que tu manipules), Java doit savoir comment comparer deux objets pour déterminer lequel des deux est le plus petit.
Il y a deux manière de faire :
- Les objets manipulés implémentent l'interface Comparable qui définit l'ordre que tu souhaites avoir ton Set
- Ou tu passes au constructeur de ton SortedSet un Comparator pour déterminer un ordre, soit parce que les objets n'implémentent pas Comparable, soit parce que l'ordre du Comparable n'est pas celui attendu.
Remarque : depuis Java 8 on pourra s'aider des méthodes Comparator.comparing (& co) qui construisent des comparateurs à la volée.
3 oct. 2018 à 18:13
3 oct. 2018 à 18:27
Exemple : https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html
Si c'est une classe à toi, il faut explicitement implémenter l'interface Comparable et sa méthode compareTo.
Remarque : ça c'est dans le cas où tu utilises Comparable (première manière de faire), mais si tu utilises un Comparator (deuxième manière de faire) tu n'as pas besoin de modifier les classes des objets.
Dynamiquement tu peux savoir si un objet est Comparable en utilisant instanceof
3 oct. 2018 à 18:34
Quelle est la différence ?
3 oct. 2018 à 19:35
Si tu as deux String "a" et "b", equals va te dire qu'ils sont différents, mais tu ne sauras pas que "a" est plus petit que "b" ce que sauras me dire la méthode compareTo
Remarque : si on veut changer l'ordre, du plus grand au petit, il faudra utiliser un Comparator qui dira que "b" est plus petit que "a".
Regarde la documentation de Comparable, il y est expliqué la relation qu'il y a entre Comparable et equals.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Comparable.html