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 :

HashTable avec Valeurs multiples


Sujet :

Langage Java

  1. #1
    Membre régulier Avatar de khand
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 118
    Points
    118
    Par défaut HashTable avec Valeurs multiples
    Bonjours,

    J'aurais voulu savoir si il était possible d'associer plusieurs objets à un clé dans une Hashtable? Ce que je fais pour le moment c'est que j'associe à une clé, une LinkedList. Mais ca ne marche pas fort ... =/

    Merci
    "Rather than love, than monney, than faith, than
    fame, than fairness, give me truth."

  2. #2
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Bonjour,

    Utiliser une collection me semble malheureusement la seule possibilité.
    Qu'est ce qui ne marche pas fort dans ta solution?

  3. #3
    Membre régulier Avatar de khand
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 118
    Points
    118
    Par défaut
    Lorsque j'essaye de récupérer la liste d'objet et que j'affiche un champ d'un élément qui est ds cette liste j'obtiens l'erreur suivante :

    java.lang.ClassCastException

    =/

    Merci pour la réponse.
    "Rather than love, than monney, than faith, than
    fame, than fairness, give me truth."

  4. #4
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Peux tu montrer comment tu définis ta hashmap ainsi que son parcours et la lecture de ses données. tu ne devrais pas avoir ce genre de problème normalement si tu utilises bien le coté générique de la hashmap!

  5. #5
    Membre régulier Avatar de khand
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 118
    Points
    118
    Par défaut
    La méthode de création
    -----------------------
    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
     
    public void creation_hastable_dossiers()
        {
            System.out.println("creation_hastable_dossiers");
            for(int i = 0; i < liste_dossier.size();i++)
            {
                un_dossier = (dossier)liste_dossier.get(i);
                num_dossier = un_dossier.getNum_dossier();
                if(num_dossier.compareTo(num_tamp)!=0 && i != 0)
                {
                    table_dossier.put(num_dossier, liste_tamp);
                    System.out.println("" + liste_tamp.size());
                    liste_tamp.clear();
                }
                num_tamp = num_dossier;
                liste_tamp.add(un_dossier);
            }
        }

    Définition de la méthode de récupération
    --------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public LinkedList get_dossier(String num_dossier)
        {
            return (LinkedList)table_dossier.get(num_dossier);
        }

    Utilisation
    ---------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    liste = Moteur.get_dossier(num_dossier);    
        for(int i = 0 ; i < liste.size();i++)
        {
            un_dossier = (dossier)liste.get(i);
            System.out.println("" + un_dossier.getNom_client());
        }
    "Rather than love, than monney, than faith, than
    fame, than fairness, give me truth."

  6. #6
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Tu compiles en quelle version de java?

    Est ce que tu as utilisé ce genre de déclaration?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Hashtable<String, LinkedList<Dossier>> tableDossier = new Hashtable<String, LinkedList<Dossier>>();
    Et qu'est ce que tu essayes de faire à ce niveau là exactement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(num_dossier.compareTo(num_tamp)!=0 && i != 0)
                {
                    table_dossier.put(num_dossier, liste_tamp);
                    System.out.println("" + liste_tamp.size());
                    liste_tamp.clear();
                }
                num_tamp = num_dossier;
                liste_tamp.add(un_dossier);

  7. #7
    Membre régulier Avatar de khand
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 118
    Points
    118
    Par défaut
    Mon code n'es pas très facile à appréhender comme ça. Mais je viens de simplifier la chose afin que ce soit plus aisé pour la lecture.

    Déclaration
    -----------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private HashMap table_dossier;
    private HashMap table_commandes;
    Dans le constructeur :
    ----------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    table_dossier = new HashMap();
    table_commandes = new HashMap();
    Déclaration de la fonction de création de la Hashmap
    ---------------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ....
    liste_tamp.add("3");
    liste_tamp.add("36");
    liste_tamp.add("3ucs");
    table_dossier.put("12", (LinkedList)liste_tamp);
    ...
    Déclaration d'une fonction de recherche d'un élément dans la Hashmap
    --------------------------------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public LinkedList get_dossier(String num_dossier)
        {
            return (LinkedList)table_dossier.get(num_dossier);
        }
    Appel de cette fonction afin de retrouver un élément :
    ----------------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    num_dossier = in_num_dossier.getText(); //récupération du numéro rentré !
     
        liste = Moteur.get_dossier(num_dossier);
     
        for(int i = 0 ; i < liste.size();i++)
        {
            string_tamp = (String)liste.get(i);
            System.out.println("" + string_tamp);
        }

    Merci beaucoup =/
    "Rather than love, than monney, than faith, than
    fame, than fairness, give me truth."

  8. #8
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Si tu utilises une version 1.5 ou 1.6 de java, tu as la possibilité d'utiliser les types génériques dans les collections, ceci facilite méchamment leurs utilisations quand on a bien compris comment les utiliser. J'ai essayé de retranscrire ton code le plus fidèlement possible mais il y avait cette zone d'ombre que j'aurai aimé que tu m'expliques mais ce n'est pas grave.

    Je suppose une classe Dossier:
    Dossier.java:
    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
    package test;
     
    public class Dossier {
        private String numDossier;
        private String nomClient;
     
        public Dossier(String numDossier, String nomClient) {
        this.nomClient = nomClient;
        this.numDossier = numDossier;
        }
     
        public String getNumDossier() {
        return numDossier;
        }
     
        public void setNumDossier(String numDossier) {
        this.numDossier = numDossier;
        }
     
        public String getNomClient() {
        return nomClient;
        }
     
        public void setNomClient(String nomClient) {
        this.nomClient = nomClient;
        }
     
    }
    Test.java
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    package test;
     
    import java.util.Hashtable;
    import java.util.LinkedList;
     
    public class Test {
        /*
         * HashTable<K,V>: 
         * K => String
         * V => LinkedList<Dossier>
         */
        private static Hashtable<String, LinkedList<Dossier>> tableDossier = new Hashtable<String, LinkedList<Dossier>>();
        private static LinkedList<Dossier> listeDossier = new LinkedList<Dossier>();
     
        /**
         * @param args
         */
        public static void main(String[] args) {
        /*
         * Initialisation de valeurs quelconque dans une liste temporaire, utilise pour creer la Hashtable
         */
        listeDossier.add(new Dossier("1", "c1"));
        listeDossier.add(new Dossier("2", "c2"));
        listeDossier.add(new Dossier("3", "c3"));
        listeDossier.add(new Dossier("1", "c5"));
        listeDossier.add(new Dossier("4", "c4"));
        /*
         * Nous allons ranger les dossiers present dans la liste listeDossier par numDossier dans une Hashtable
         */
        creationHastableDossiers();
        //Pour chaque cle, appartenant à la liste de toutes les clés de la Hashtable
        for(String cle: tableDossier.keySet()){
            StringBuffer buf = new StringBuffer();
            //Pour chaque Dossier, contenu dans la LinkedList pour la clé cle
            for(Dossier dossier:tableDossier.get(cle)){
             buf.append(" "+dossier.getNomClient());
            }
            System.out.println(cle+":"+buf.toString());
        }
        }
     
        public static void creationHastableDossiers() {
        String numDossier = null;
        // Pour chaque dossier présent dans listeDossier
        for (Dossier unDossier : listeDossier) {
            //je recupere le numero de dossier
            numDossier = unDossier.getNumDossier();
            // Je cherche s'il existe une liste dans la Hashtable pour le numero
            LinkedList<Dossier> list = getDossier(numDossier);
            // S'il n'en existe pas, je la créé
            if (list == null) {
            list = new LinkedList<Dossier>();
            }
            //J'ajoute le dossier dans la liste
            list.add(unDossier);
            //J'ajoute la liste dans la HashTable
            tableDossier.put(numDossier, list);
        }
        }
     
        public static LinkedList<Dossier> getDossier(String num_dossier) {
        return tableDossier.get(num_dossier);
        }
     
    }

  9. #9
    Membre régulier Avatar de khand
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 118
    Points
    118
    Par défaut
    Avant que je test ça : le code que tu viens de me montrer fonctionne ?:o


    Re-Merci !
    "Rather than love, than monney, than faith, than
    fame, than fairness, give me truth."

  10. #10
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Il fonctionne, il faut que tu le mettes dans un package test ou que tu changes le nom du package dans les fichiers :p

    Je viens de commenter le code, si tu comprends pas des trucs, demandes

  11. #11
    Membre régulier Avatar de khand
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 118
    Points
    118
    Par défaut
    Je suis en train de ré-adapter mon code,mais j'ai essayer avec un petit exemple et ça à l'air de fonctionner. Pour le moment j'ai juste un Null Pointeur Exception ! Rien de bien méchant


    Merci , je te tiens au courant!
    "Rather than love, than monney, than faith, than
    fame, than fairness, give me truth."

  12. #12
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Pas de problème.
    Par contre, si je peux faire une remarque, je sais pas quel est l'avancée de ton projet mais je te conseille vraiment de mettre ton code conforme aux normes de codage java, surtout s'il s'agit d'un projet professionnel.
    Par exemple, une classe commence toujours par une majuscule ...

  13. #13
    Membre régulier Avatar de khand
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 118
    Points
    118
    Par défaut
    Je suis encore aux études,et on nous a pas encore vraiment parlé de ces normes en fait =/

    Un site de référence pour appréhender ça ? :o
    "Rather than love, than monney, than faith, than
    fame, than fairness, give me truth."

  14. #14
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Bien sur, tu peux déjà regarder ce qui est proposé ici:
    http://cyberzoide.developpez.com/java/javastyle/

    Même si tu es encore dans ta phase d'étude, il est important de prendre dès maintenant de bonnes habitudes. Rien que de faire ça, rendra ton code plus lisible par une grande partie de la communauté. Certains puristes ne prendront meme pas la peine de regarder ton code s'il est mal présenté donc autant faire un effort le plus vite possible

  15. #15
    Membre régulier Avatar de khand
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 118
    Points
    118
    Par défaut
    Super ! Je vais prendre l'habitude ... ! Merci

    Concernant mon projet, plus d'erreur ! Mais lorsque j'essaye de récupérer un objet de ma hashmap, rien dedans :s ! Une idée comme ça ? Sans te plonger dans le code. :o


    Merci
    "Rather than love, than monney, than faith, than
    fame, than fairness, give me truth."

  16. #16
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Sans me plonger dans le code, c'est pas forcement évident

    Est tu sur d'avoir fait le bon put(key,value) sur ta hashtable? la méthode get(key) te renverra quelque chose que s'il y a quelque chose dedans

  17. #17
    Membre régulier Avatar de khand
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 118
    Points
    118
    Par défaut
    Et bien voilà, tout fonctionne


    Un grand merci en tout cas
    "Rather than love, than monney, than faith, than
    fame, than fairness, give me truth."

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

Discussions similaires

  1. champ avec valeurs multiples
    Par oyard dans le forum Modélisation
    Réponses: 4
    Dernier message: 29/08/2013, 15h12
  2. Déclaration de variable avec valeurs multiples regroupées
    Par Dr_No dans le forum MS SQL Server
    Réponses: 20
    Dernier message: 06/05/2011, 13h57
  3. Probleme de multiplication avec valeurs de sous requete
    Par fred_vannes56 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 21/05/2008, 14h34
  4. Encodage URL dynamique avec des paramètres à valeurs multiples
    Par lazarel dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 12/03/2008, 16h35
  5. Insert avec des valeurs multiple
    Par zakaria.chafi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/10/2007, 19h21

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