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
Version imprimable
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
Bonjour,
Utiliser une collection me semble malheureusement la seule possibilité.
Qu'est ce qui ne marche pas fort dans ta solution?
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.
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!
La méthode de création
-----------------------
Code:
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:
1
2
3
4
5 public LinkedList get_dossier(String num_dossier) { return (LinkedList)table_dossier.get(num_dossier); }
Utilisation
---------
Code:
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()); }
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 :PCode:Hashtable<String, LinkedList<Dossier>> tableDossier = new Hashtable<String, LinkedList<Dossier>>();
Code:
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);
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:
1
2
3 private HashMap table_dossier; private HashMap table_commandes;
----------------------
Déclaration de la fonction de création de la HashmapCode:
1
2
3 table_dossier = new HashMap(); table_commandes = new HashMap();
---------------------------------------------------
Déclaration d'une fonction de recherche d'un élément dans la HashmapCode:
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:
1
2
3
4
5 public LinkedList get_dossier(String num_dossier) { return (LinkedList)table_dossier.get(num_dossier); }
----------------------------------------------------
Code:
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 =/
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.javaCode:
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:
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 que je test ça : le code que tu viens de me montrer fonctionne ?:o
Re-Merci !
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
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!
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 ...
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
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 :P
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
Sans me plonger dans le code, c'est pas forcement évident :P
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 ;)
Et bien voilà, tout fonctionne :)
Un grand merci en tout cas ;)