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 :

Probleme de tri d'une Hashtable


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 82
    Par défaut Probleme de tri d'une Hashtable
    Bonjour,

    Mon programme sort la Hashtable suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Hashtable [ (Integer) identifiant,    (Vector) parametres [ (int) 0 : (String) type,
                                                                (int) 1 : (Float) proportion,
      							    (int) 2 : (Integer) nb_total,
    							    (int) 3 : (Integer) programme ]      ]
    Je souhaiterai que cette Hashtable soit triee selon la valeur (Float) proportion. Cependant, une Hashtable ne se trie pas, et encore moins sur la valeur d'un de ses parametre. J'ai essaye avec des Collection, des ArrayList, mais je n'arrive a rien. Comment faire ca?

    Merci,

    Dazdh

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    la hashtable, tout comme la hashmap, n'as pas d'ordre et donc ne peux pas être triée. Si tu veux une association clé / valeur avec un ordre, il va falloir t'orienter vers les implémentation de SortedMap. les List on effectivement un ordre, mais ce ne sont pas des associations clé - valeur, je doute donc de leur intérêt pour toi.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 82
    Par défaut
    Merci, SortedMap semble interressant pour ca.

    Je peux donc utiliser une TreeMap (qui implemente SortedMap).

    TreeMap a une methode put(Object, Object).

    Dans mon cas, comment utiliser cette methode? Dois-je faire put (proportion, PID) puis retrouver les autres infos a partir de PID?

    J'aurais donc un Integer en cle de ma TreeMap. Comment ensuite les trier? TreeMap ne semble pas avoir de methode pour trier les elements.

    Merci,

    Dazdh

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    le tri ce fait au fur est à mesure de l'ajout. Pour imposer tes propres règles de tri, il faut prendre le constructeur de TreeMap qui prend en paramètre une classe implémentant l'interface Comparator.

    Note aussi que les SortedMap trient sur base de la clé, pas de la valeur!

    Vu que tu veux trier sur base des valeurs, peut etre qu'utiliser une ArrayList séparée pour les valeur serait préférable (on peut trier un List avec les méthodes sort se trouvant dans la classe statique "Collections")

  5. #5
    Membre chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Par défaut


    Normalement quand on ajoute des elements dans SortedMap (TreeMap), le tri est effectué au fil de l'eau.

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 82
    Par défaut
    Oui TreeMap fait bien le tri au fil de l'eau, j'ai essaye. Mais mon probleme est plus complexe et je n'arrive pas a l'implementer.

    J'ai la Hashtable suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Hashtable [ (Integer) id, (Vector) param [ (int) 0 : (String) type,
                                               (int) 1 : (Float) proportion,
                    			   (int) 2 : (Integer) nb_total,
    					   (int) 3 : (Integer) programme ]  ]
    qui vaut par exemple:

    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
    Hashtable [ 1000, v [ type1,
                          0.1,
    		      4451,
                          145 ]      ,
                2000, v [ type2,
                          0.4,
                          4451,
    		      41 ]       ,
                3000, v [ type3,
                          0.4,
                          4541,
    		      51 ]       ,
                4000, v [ type4,
                          0.2,
                          524,
    		      10 ]       ]
    et vu que je veux la trier sur proportion, je souhaite avoir le resultat suivant:

    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
    Hashtable [ 1000, v [ type1,
                          0.1,
    		      4451,
                          145 ]      ,
                4000, v [ type4,
                          0.2,
                          524,
    		      10 ]       ,
                2000, v [ type2,
                          0.4,
                          4451,
    		      41 ]       ,
                3000, v [ type3,
                          0.4,
                          4541,
    		      51 ]       ]
    En passant par une TreeMap, je n'y arrive pas parce que si je met la proportion en cle, ca marche mais je ne peux pas avoir deux cle egales, donc s'il y a deux proportions egales (comme dans mon exemple), l'une sera ecrasee.

    De plus, le resultat final ne peut pas etre une Hashtable parce que le tri final compte (alors que dans une Hashtable il n'est pas conserve). Il ne peut pas non plus etre un TreeMap parce que le tri se ferait sur la cle (id).

    Avez vous donc une idee pour realiser ce traitement?

    Merci,

    Dazdh

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    comme j'ai dit, faire le tri sur une list, mais tu perdra l'association clé valeur. Ou alors tu inverse ta map (la clé deviens la valeur et vis-versa), il est alors possible de trier sur base du vector. La question étant: as-tu besoin que ce soit l'association clé - valeur qui soit triée?

Discussions similaires

  1. probleme de tri d'une liste
    Par italiasky dans le forum Général Python
    Réponses: 2
    Dernier message: 26/04/2008, 10h21
  2. probleme de tri dans une table
    Par tchimou dans le forum Bases de données
    Réponses: 4
    Dernier message: 03/04/2007, 15h59
  3. Probleme de parcours d'une hashtable
    Par lilli1407 dans le forum Langage
    Réponses: 11
    Dernier message: 16/10/2006, 13h51
  4. probleme de tri dans une base !
    Par lucke_34 dans le forum Access
    Réponses: 4
    Dernier message: 30/07/2006, 10h04

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