Methode tri alphabetique

javateux Messages postés 94 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 3 juillet 2004 - 1 juin 2004 à 11:31
verdy_p Messages postés 202 Date d'inscription vendredi 27 janvier 2006 Statut Membre Dernière intervention 29 janvier 2019 - 25 févr. 2009 à 19:40
bonjour, quelqu'un connait-il une methode permettant de trier des string par ordre alphabetique?

Merci d'avance

4 réponses

kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
1 juin 2004 à 13:51
Salut,

les Strings ont la méthode compareTo() qui fait la comparaison lexicographique.
0
javateux Messages postés 94 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 3 juillet 2004
1 juin 2004 à 15:44
Merci, toujours present en cas de besoin...
0
Syruis Messages postés 181 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 28 avril 2009
25 janv. 2005 à 00:07
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
0
verdy_p Messages postés 202 Date d'inscription vendredi 27 janvier 2006 Statut Membre Dernière intervention 29 janvier 2019
25 févr. 2009 à 19:40
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>
0
Rejoignez-nous