Methode tri alphabetique

Signaler
Messages postés
94
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
3 juillet 2004
-
verdy_p
Messages postés
203
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
29 janvier 2019
-
bonjour, quelqu'un connait-il une methode permettant de trier des string par ordre alphabetique?

Merci d'avance

4 réponses

Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
3
Salut,

les Strings ont la méthode compareTo() qui fait la comparaison lexicographique.
Messages postés
94
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
3 juillet 2004

Merci, toujours present en cas de besoin...
Messages postés
184
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
28 avril 2009

Jai mis tout l'algo la:

http://www.javafr.com/code.aspx?ID=29059

www.javaetvous.new.fr
le secret de la vie n'est pas de faire ce que l'on aime mais d'aimer ce que l'on fait ....
Syruis
Messages postés
203
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
29 janvier 2019

Attention à ce qu'on entend par "tri alphabétique". Le tri lexicographique (tel que réalisé par String.compareTo) n'est PAS un tri alphabétique (il classe "Z" avant "a")

Pour trier correctement dans l'ordre alphabétique, il faut utiliser un comparateur (voir l'interface Comparator) et le donner en paramètre de la méthode de tri. String.compareTo() n'est pas un comparateur mais un Comparable (c'est une méthode de l'objet prenant un seul paramètre et non une fonction statique prenant deux paramètres), mais se contente de trier dans l'ordre binaire des caractères (dans l'ordre numérique des codets UTF-16 stockés dans les "char" contenus dans la chaine, ce qu'on appelle parfois l'ordre "lexicographique" même si c'est un très mauvais terme ne traduisant rien du tout au plan lexical comme au plan graphique, surtout en présence d'Unicode!).

Pour créer un comparateur alphabétique, il faut créer une classe implémentant Comparator et définissant donc la méthode statique de comparaison à deux paramètres.

Ses paramètres sont des Object et pas directement des String: dans le code de la méthode il faut encore utiliser un "typecast" en (String).

L'autre solution est de le définir de façon générique en implémentant Comparator<string> (en Java 1.4 ou 5+), ce qui évite le typecast peu performant à l'exécution, et utiliser donc un tri générique.

On ne peut pas s'en passer car la classe String n'est pas surchargeable (elle est finale).

Le contenu du comparateur est dépendant du type de comparaison à faire, mais en général on compare d'abord les chaînes converties en casse simple, avant de comparer les autres caractères.

Pour prendre en compte un tri plus précis, adapté par exemple à la langue française, le code est plus complexe et nécessite le calcul préalable d'une clé de collation (avec un collateur instancié en tant que champ de l'objet comparateur lui-même, afni de le réutiliser au lieu de l'isntancier à chaque comparaison durant le tri): la conversion de chaine en clé de collation avec ce collateur permet ensuite un tri lexicographique des éléments binaires de chaque clé. Le clacul des clés de collation s'effectue sur plusieurs niveaux: caractères de base, puis accents et diacrituques (depuis la fin de chaîne vers le début en français!), puis différence de casse des caractères de base, puis classement des autres différences non ignorables, et enfin classement des caractères ignorables et autres différences avec un tri binaire. C'est ce qu'on appelle un tri multiniveau.

D'autres options peuvent être considérées pour prendre en compte aussi la valeur numérique des nombres inclus dans les chaînes, au lieu de les traiter chiffre par chiffre.</string>