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

Langage Java Discussion :

trier une liste


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de JulienFio
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Par défaut trier une liste
    Bonjour,

    J'ai un code qui me semble logique et bon mais je n'ai pas le résultat escompté.

    Je souhaite que mon vecteur soit trié par l'ordre naturel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     Collection setTable = new Vector();
     Map mapTable = new TreeMap();
     
    ...
     
    mapTable.put(item, table);
     
    ...
     
    setTable.addAll(mapTable.entrySet());
    Collections.sort((List<T>) setTable);
    bien entendu ma liste n'est pas trié. je pense d'ailleur que je n'ai pas besoin du Collections.sort() car de base un Vector trie dans l'ordre naturel non ?

  2. #2
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Bonjour.

    Non, un Vector ne trie pas naturellement.
    Tu as deux possibilités pour trier :
    - Tu utilises une liste classique et tu fait une Collections.sort (ce que tu as fait)
    - Tu utilises un SortedSet qui trie les éléments 'en live'

    Dans les deux cas, pour que le tri soit effectif, tes structures doivent savoir comment trier tes éléments. Là encore, deux solutions:
    - Les éléments implémentent Comparable
    - Tu files un Comparator (à l'initialisation du SortedSet ou lors de l'appel à Collections.sort)

  3. #3
    Membre expérimenté Avatar de JulienFio
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Par défaut
    Pourquoi n'est-il pas possible de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MyComparator compareTo = new MyComparator();
    Collection setTable = new TreeSet(compareTo);
    Map mapTable = new TreeMap();
    ...
    mapTable.put(item, table);
    ...
    setTable.addAll(mapTable.entrySet());
    Mon TreeSet reste vide..

  4. #4
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Ce bout de code a l'air correct.
    Es-tu sûr que ta table n'est pas vide au moment où tu remplis ton TreeSet?

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 586
    Par défaut
    Note au passage que quand tu appelles mapTable.entrySet(), ça te renvoie une collection (triée) d'objets Map.Entry.

    Es-tu certain que ton comparateur sait comparer des Map.Entry ?

    (Et est-ce que par hasard tu ne ferais pas une gestion d'exceptions un peu sauvage dans le cas où il ne sache pas comparer ça ?)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre expérimenté Avatar de JulienFio
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Par défaut
    Je ne suis pas certain que mon comparateur sache le faire, j'peux vous fournir le code de mon comparateur s'il faut.

    Donc en fait, dans mon TreeSet ou même dans un veteur je dois obtenir la collection déjà trié par la map ?

  7. #7
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    En fait, l'idéal serait que tu utilises les generics et que tu types tes structures de données et ton comparateur. Rien qu'en faisant ça, je pense que tu verras fleurir quelques erreurs et/ou warnings.

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

Discussions similaires

  1. Trier une liste chainée.
    Par gregb34 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 21/05/2006, 23h05
  2. Trier une liste de dossiers et de fichiers
    Par steveleg dans le forum Langage
    Réponses: 2
    Dernier message: 07/04/2006, 17h54
  3. trier une list
    Par elekis dans le forum C++
    Réponses: 4
    Dernier message: 23/03/2006, 13h01
  4. [c#] Trier une liste de nombres liés.
    Par Joad dans le forum ASP.NET
    Réponses: 13
    Dernier message: 11/05/2005, 12h17
  5. [Debutant(e)]Trier une liste
    Par LeDébutantJava dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 19/08/2004, 13h44

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