IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Arrays.sort() précision fonctionnement


Sujet :

Collection et Stream Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut Arrays.sort() précision fonctionnement
    Bonjour, je désire trier un tableau d'objets Tri (constructeur String) -->
    - implémentation de Comparable
    - redéfinition de compareTo()

    Ce que je voudrais comprendre :

    a) - Je redéfinis complètement CompareTo : NOT OK

    b) - Je redéfinis CompareTo avec return : OK
    return lettre.compareTo(t.getLettre());

    POURQUOI b) fonctionne et pas a) ?

    c) - d'autant que ds le cas d'un tableau d'objets (constructeur int)
    le a) fonctionne

    Merci de m"éclairer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    package tableau_2;
     
    import java.util.Arrays;
     
     
    class Tri implements Comparable<Tri>{
     
    	String lettre;
     
    	Tri (String lettre){
    		this.lettre = lettre;
    	}
     
    	public String getLettre(){
    		return lettre;
    	}
     
    	public int compareTo(Tri t) {
     
    		// a) NOT OK
    		//**********
    		if ((this.lettre) < (t.getLettre()))
    			return -1;
     
    			else if ((this.lettre) > (t.getLettre()))
    				return 1;
    			else
    				return 0;
     
    		 // b) OK
    		 //********
    		return lettre.compareTo(t.getLettre());
    	}	
     
    }
     
    public class Arrays_Tableau_sort {
    	public static void main(String[] args) {
     
    		Tri tri0  = new Tri ("a");
    		Tri tri1  = new Tri ("c");
    		Tri tri2  = new Tri ("b");
    		Tri tri3  = new Tri ("d");
     
    		Tri[]objets = {tri0,tri1,tri2,tri3};
     
    		Arrays.sort(objets);
    		System.out.println("Apres tri" + Arrays.toString(objets));
     
    	}
    }

  2. #2
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 605
    Points : 15 644
    Points
    15 644
    Par défaut
    Le cas a) ne marche pas car les opérateurs "<" et ">" ne marchent que sur les nombres.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut
    Merci , mais alors quand on applique

    return lettre.compareTo(t.getLettre());

    que fais le code de cette méthode lettre.compareTo(t.getLettre());

    afin d'effectuer le tri ?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 564
    Points : 21 629
    Points
    21 629
    Par défaut
    Citation Envoyé par michelp3 Voir le message
    que fais le code de cette méthode lettre.compareTo(t.getLettre());

    afin d'effectuer le tri ?
    Comparaison, pas tri. Il suffit de lire la JavaDoc de String.compareTo().
    Mais bon, c'est pas transcendant. Les opérateurs < et > n'existent pas pour les objets, mais ils existent pour les char, qui composent une String.

  5. #5
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 605
    Points : 15 644
    Points
    15 644
    Par défaut
    Les objets String contiennent en interne, les caractère sous forme de char[]. Les char étant des nombres ils peuvent être comparés un a un avec "<" et ">".

    Si tu veux le code exact:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
        public int compareTo(String anotherString) {
    	int len1 = count;
    	int len2 = anotherString.count;
    	int n = Math.min(len1, len2);
    	char v1[] = value;
    	char v2[] = anotherString.value;
    	int i = offset;
    	int j = anotherString.offset;
     
    	if (i == j) {
    	    int k = i;
    	    int lim = n + i;
    	    while (k < lim) {
    		char c1 = v1[k];
    		char c2 = v2[k];
    		if (c1 != c2) {
    		    return c1 - c2;
    		}
    		k++;
    	    }
    	} else {
    	    while (n-- != 0) {
    		char c1 = v1[i++];
    		char c2 = v2[j++];
    		if (c1 != c2) {
    		    return c1 - c2;
    		}
    	    }
    	}
    	return len1 - len2;
        }

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut UTHER et Thelvin
    Merci UTHER et Thelvin,

    C'est aussi un peu ce que je suspectais ... et me voilà rassuré !

    Grand merci , à bientôt !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. array sort sous explorer different sour ff
    Par elekis dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 31/07/2008, 15h37
  2. Collections.sort ne fonctionne pas
    Par lex13 dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 12/07/2007, 11h13
  3. Pourquoi mon code est plus lent que Arrays.sort
    Par alexis779 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/12/2006, 12h44
  4. Petit probleme avec Arrays.Sort(...)
    Par Seth77 dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 15/01/2006, 12h48
  5. Array + sort
    Par zizou39 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/08/2005, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo