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
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."
Bonjour,
Utiliser une collection me semble malheureusement la seule possibilité.
Qu'est ce qui ne marche pas fort dans ta solution?
Avant de poster, venez tenter votre chance ici
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."
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!
Avant de poster, venez tenter votre chance ici
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."
Tu compiles en quelle version de java?
Est ce que tu as utilisé ce genre de déclaration?
Et qu'est ce que tu essayes de faire à ce niveau là exactement
Code : Sélectionner tout - Visualiser dans une fenêtre à part Hashtable<String, LinkedList<Dossier>> tableDossier = new Hashtable<String, LinkedList<Dossier>>();
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);
Avant de poster, venez tenter votre chance ici
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
-----------
Dans le constructeur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 private HashMap table_dossier; private HashMap table_commandes;
----------------------
Déclaration de la fonction de création de la Hashmap
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 table_dossier = new HashMap(); table_commandes = new HashMap();
---------------------------------------------------
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
6
7 .... liste_tamp.add("3"); liste_tamp.add("36"); liste_tamp.add("3ucs"); table_dossier.put("12", (LinkedList)liste_tamp); ...
--------------------------------------------------------------------
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 public LinkedList get_dossier(String num_dossier) { return (LinkedList)table_dossier.get(num_dossier); }
----------------------------------------------------
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."
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:
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 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; } }
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); } }
Avant de poster, venez tenter votre chance ici
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."
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
Avant de poster, venez tenter votre chance ici
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."
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 ...
Avant de poster, venez tenter votre chance ici
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."
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
Avant de poster, venez tenter votre chance ici
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."
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
Avant de poster, venez tenter votre chance ici
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."
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager