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 :

Trier une HashMap


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 53
    Par défaut Trier une HashMap
    Bonjour à tous;


    J'aurai un petit soucis avec les HashMap je crois
    Je croyais que les HashMap peuvent être facilement trier cependant quand j'ai voulu le faire le TreeMap ou même manuellement avec ce code :
    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
    Map <Integer,Node> hmClone = new HashMap<Integer,Node>();	
    		for(int key = 0; key < 27;key++){
    			hmClone.put(new Integer(key), new Node(key));
    		}
     
    		//TESTS
     
    		for(Map.Entry<Integer,Node> entry : hmClone.entrySet()) {
    			Integer cle = entry.getKey(); //cle equivalent to valeur.labelRef
    			Node valeur = entry.getValue();
     
     
    			text.append(cle+"|*| {");
    			for(int i = 0;i < valeur.n_sons.size();i++){
    				text.append(valeur.n_sons.get(i)+"|");
    			}
    			text.append("}\n");
     
    		}
    J'ai un problème au niveau des lignes 17, 16, 19 et 18 qui ne sont pas dans le bon ordre même en utilisant une technique barbare comme la précédente car elle me donne ce résultat :
    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
    0|*| {}
    1|*| {}
    2|*| {}
    3|*| {}
    4|*| {}
    5|*| {}
    6|*| {}
    7|*| {}
    8|*| {}
    9|*| {}
    10|*| {}
    11|*| {}
    12|*| {}
    13|*| {}
    14|*| {}
    15|*| {}
    17|*| {}
    16|*| {}
    19|*| {}
    18|*| {}
    21|*| {}
    20|*| {}
    23|*| {}
    22|*| {}
    25|*| {}
    24|*| {}
    26|*| {}

    si quelqu'un pourrait me tirer de cette embrouille

    Je vous remercie d'avance

    @+

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Par défaut
    Ce n'est pas ça qui conviendrait mieux
    http://download.oracle.com/javase/6/...edHashMap.html

    ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 53
    Par défaut
    Merci hedes
    j'ai utilisé la classe LinkedHashMap mais ça donne la même erreur
    !!!!!!

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Euh, les gens.

    Remplacer HashMap par TreeMap, et voilà, c'est une Map trieuse.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 53
    Par défaut
    j'ai remplacé HashMap par TreeMap en lisant ce lien http://java.developpez.com/faq/java/...angage_donnees
    Mais le résultat est le même
    ...

  6. #6
    Membre émérite Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Par défaut
    il y a un petit conceptuel qui me dérange un petit peu.

    Le rôle de l'interface Map est de définir une structure qui permet d'associer des valeurs à une clefs.

    Ensuite, quand tu souhaites récupérer la liste des entrées (clé + valeur), tu récupère un Ensemble Set sur lequel aucune contrainte d'ordre ne sont indiqué dans la documentation (sauf erreur de ma part). En fonction de l'implémentation, il est possible de "l'ordre de ton ensemble" (ou plutot la manière dont tu parcours ton ensemble).

    Si tu souhaites que cela soit trié, il faut que tu le fasses manuellement. Tu as la méthode Collections.sort qui peut t'aider à cela.

    [Edit]
    L'ordre apporté par le TreeMap permet de garantir l'accès en log(n) aux methodes containsKey, get, put et remove. Par contre, il ne me semble pas que cela ait un rapport avec retour de la methode getEntries
    [/Edit]

  7. #7
    Membre éprouvé Avatar de +Guilhem
    Profil pro
    Ingénieur d'études Java/JEE
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur d'études Java/JEE

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut
    Tu peux mettre ton code avec une TreeMap ?
    Tu as du faire une erreur quelque part car avec une TreeMap tes keys seront correctement triées.

    @benratti : En l'état actuel des choses, oui c'est le cas, le Set récupéré ne garantit pas l'ordre (car HashMap). Mais la classe TreeMap implémente SortedMap dont la méthode entrySet() garantit une relation d'ordre sur les clés.

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par youza Voir le message
    j'ai remplacé HashMap par TreeMap en lisant ce lien http://java.developpez.com/faq/java/...angage_donnees
    Mais le résultat est le même
    Je félicite tes efforts de chercher à te documenter pour comprendre ce que tu fais.
    C'est bien, vraiment. J'ai aucune idée de comment tu as pu te tromper en suivant les indications de ce lien, mais je loue l'effort que tu as fait à le faire. C'est dommage que ça n'ait pas payé.

    Mais quand je disais "remplacer HashMap par TreeMap", c'est littéralement. Pas de lien à lire, pas d'adaptation à faire, là où tu avais "HashMap" dans ton exemple, tu remplaces par "TreeMap" et c'est tout. Rien de plus. Ça marche parfaitement.

    Maintenant, bon, on va essayer de comprendre ce qui a pu t'arriver. Faudrait que tu nous montres ton code.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [Collection] Trier une Hashmap par valeur
    Par aelmalki dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 16/07/2009, 18h08
  2. trier une hashmap
    Par fadoua34090 dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 26/10/2007, 01h16
  3. Trier une hashmap
    Par nonolerobot77 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 21/09/2007, 20h39
  4. [débutant] cherche a copier une HashMap
    Par mathieublanc13 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 09/05/2004, 14h33
  5. Créer une vue pour trier une requete UNION ?
    Par Etienne Bar dans le forum SQL
    Réponses: 3
    Dernier message: 03/01/2003, 20h22

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