Bonjour à tous,
Je bloque sur deux notions de collection, les Hashset et Treeset.
Je rentre les employés d'une société, et je voudrais que une personne n'ai qu'une seul fonction (ex: Dupont est directeur, donc Dupont ne pourra pas être ouvrier), donc je dois éviter les doublons, c'est le pourquoi de l'emploi des Hashset ou Treeset.
Je sais que pour le Hashset, je dois surchargé les méthodes equals() et hashcode() et pour le Treeset, je dois surchargé le méthode compareTo().
Donc à priori ici, je dois comparer le nom et le fonction des personne que je rentre, ce que je crois que je fais dans la méthode equals().
Je vous mets les deux classes qui sont concernées par ce hashset.
Classe Personnes.java dans laquelle, j'ai mes attributs, constructeurs et accesseurs, mes méthodes hashCode() (qui me met une erreur Override) et equals().
Classe IntroDonneesSaveBin.java dans laquelle j'encode mes employés dans un tableau, après sérialisation, ils sont mis dans un fichier binaire (peu intéressant pour ce qui me concerne ici), par contre je parcours mon tableau, je crée mon hashset et je veux introduire mes objets Personnes dans mon hashset à partir de mon tableau, tout en comparant le nom et la fonction et c'est là que ça coince, il introduit tout, même quand j'ai des doublons.
Personnes.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109 import java.io.Serializable; /** * * @author Fred Nico */ public abstract class Personnes implements IntPersonne, Serializable { // *********************** Attributs *************************************** /** * Numero national de la personne */ public String numeroNational; /** * Prénom de la personne */ public String prenom; /** * Nom de la personne */ public String nom; /** * Fonction de la personne */ public String fonction; // *********************** Constructeurs *************************************** /** * Constructeur avec paramètres * * @param numeroNational * @param prenom * @param nom * @param fonction */ public Personnes(String numeroNational, String prenom, String nom, String fonction) { this.numeroNational = numeroNational; this.prenom = prenom; this.nom = nom; this.fonction = fonction; } /** * Constructeur par défaut */ public Personnes() { } // *********************** Getters and setters ********************************* /** * Getters and Setters commun à toutes les classes * * @return */ public String getNumeroNational() { return numeroNational; } public void setNumeroNational(String numeroNational) { this.numeroNational = numeroNational; } public String getPrenom() { return prenom; } public void setPrenom(String prenom) { this.prenom = prenom; } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public String getFonction() { return fonction; } public void setFonction(String fonction) { this.fonction = fonction; } //******************************* Méthodes ****************************************** /** * Méthodes */ @Override public abstract void joue(); @Override public abstract void manger(); //implement code @Override public String hashCode() { return nom + fonction; } //implément code public boolean equals(Object pp) { Personnes p = (Personnes) pp; return ((this.nom == p.nom) & (this.fonction == p.fonction)); } }
IntroDonneesSaveBin.java
Voilà, si quelqu'un de plus expérimenté que moi pouvait m'éclairer...
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211 import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Fred Nico */ public class IntroDonneesSaveBin implements Prog { /** * Tableau d'objets Personnes */ public Personnes[] tabPersonnel = null; /** * Methode qui remplis mon tableau et les attributs de chaques employés * */ @Override public void execute(MenuDepart programme) { //Création d'une haspMap qui définira la fonction d'un objet HashMap<Integer, String> mesFonctions = new HashMap<>(); // Insertion des valeurs dans la liste mesFonctions.put(1, "Directeur"); mesFonctions.put(2, "Comptable"); mesFonctions.put(3, "Secretaire"); mesFonctions.put(4, "Ouvrier"); ObjectOutputStream sortie = null; //dimensionnement de mon tableau de personnel avec ma méthode taille tableau this.tabPersonnel = new Personnes[tailleTableau()]; for (int i = 0; i < tabPersonnel.length; i++) { int choix = menuFonction();//Appel de ma méthode MenuFonction System.out.println("\n"); //Switch pour remplir les attributs d'une classe en fonction du choix fait avant switch (choix) { case 0: System.exit(0); break; case 1: Personnes directeur = new Directeur(); System.out.println("Entrer les informations demandée sur le directeur: "); System.out.print("Numéro National: "); directeur.setNumeroNational(Clavier.lireString()); System.out.print("Prénom: "); directeur.setPrenom(Clavier.lireString()); System.out.print("Nom: "); directeur.setNom(Clavier.lireString()); System.out.println("Fonction: " + mesFonctions.get(choix)); directeur.setFonction(mesFonctions.get(choix)); //Utilisation de la clé du HashMap pour définir la fonction this.tabPersonnel[i] = directeur; System.out.println("\n"); break; case 2: Personnes comptable = new Comptable(); System.out.println("Entrer les informations demandée sur le comptable: "); System.out.print("Numéro National: "); comptable.setNumeroNational(Clavier.lireString()); System.out.print("Prénom: "); comptable.setPrenom(Clavier.lireString()); System.out.print("Nom: "); comptable.setNom(Clavier.lireString()); System.out.println("Fonction: " + mesFonctions.get(choix)); comptable.setFonction(mesFonctions.get(choix));//Utilisation de la clé du HashMap pour définir la fonction this.tabPersonnel[i] = comptable; System.out.println("\n"); break; case 3: Personnes secretaire = new Secretaire(); System.out.println("Entrer les informations demandée sur la/le secretaire: "); System.out.print("Numéro National: "); secretaire.setNumeroNational(Clavier.lireString()); System.out.print("Prénom: "); secretaire.setPrenom(Clavier.lireString()); System.out.print("Nom: "); secretaire.setNom(Clavier.lireString()); System.out.println("Fonction: " + mesFonctions.get(choix)); secretaire.setFonction(mesFonctions.get(choix)); //Utilisation de la clé du HashMap pour définir la fonction this.tabPersonnel[i] = secretaire; System.out.println("\n"); break; case 4: Personnes ouvrier = new Ouvrier(); System.out.println("Entrer les informations demandée sur l'ouvrier: "); System.out.print("Numéro National: "); ouvrier.setNumeroNational(Clavier.lireString()); System.out.print("Prénom: "); ouvrier.setPrenom(Clavier.lireString()); System.out.print("Nom: "); ouvrier.setNom(Clavier.lireString()); System.out.println("Fonction: " + mesFonctions.get(choix)); ouvrier.setFonction(mesFonctions.get(choix));//Utilisation de la clé du HashMap pour définir la fonction this.tabPersonnel[i] = ouvrier; System.out.println("\n"); break; case 5: programme.showMenuDépart(); default: this.menuFonction(); } } try { this.saveDataTab(this.tabPersonnel);//appel de la méthode de sauvegarde en fichier binaire } catch (IOException ex) { Logger.getLogger(IntroDonneesSaveBin.class.getName()).log(Level.SEVERE, null, ex); } // Création d'un hashSet d'objets Personnes HashSet<Personnes> employe = new HashSet<>(); //Ajout et affichage des objets Personnes dans la liste (hashset)à partir du tableau for (Personnes perstab : tabPersonnel) { // Test de présence d'un doublon boolean ajoute = employe.add(perstab); if (ajoute) { System.out.println(" a été ajouté."); } else { System.out.println("est deja présent"); } System.out.print("Contenu de la hashSet: "); affiche(employe); } this.endProg(programme);//appel de la méthode fin de programme } /** * Méthode qui utilise un itérateur pour parcourir et afficher ce qu'il y a dans mon hashset * @param empl */ public static void affiche(HashSet<Personnes> empl) { // Création d'un itérateur Iterator<Personnes> iter = empl.iterator(); // Boucle d'affichage while (iter.hasNext()) { Personnes p = iter.next(); } System.out.println(); } /** * Fin du programme, retour au menu principale * * @param programme */ @Override public void endProg(MenuDepart programme) { System.out.println("Appuyer sur une touche pour retourner au menu."); String str = Clavier.lireString(); programme.showMenuDépart(); } /** * Méthode pour sauvegarder en binaire les objets de mon tableau(flux de * sortie d'objet) * * @param tableau * @throws FileNotFoundException * @throws IOException */ public void saveDataTab(Personnes[] tableau) throws FileNotFoundException, IOException { try (ObjectOutputStream sortie = new ObjectOutputStream(new FileOutputStream("fichier.dat"))) { for (Personnes tabPersonnel1 : tabPersonnel) { sortie.writeObject(tabPersonnel1); } } } /** * Méthode pour choisir la fonction, quitter ou retour au menu principale * * @return */ private int menuFonction() { System.out.println("Veuillez choisir un chiffre dans la liste ci-dessous: "); System.out.println("0 ==> Quitter"); System.out.println("1 ==> Directeur"); System.out.println("2 ==> Comptable"); System.out.println("3 ==> Secretaire"); System.out.println("4 ==> Ouvrier"); System.out.println("5 ==> Retour au menu de départ"); System.out.print("Votre choix: "); int choix; choix = (Clavier.lireInt()); return choix; } /** * Méthode pour choisir le nombre d'employé et donc la taille de mon tableau * * @return */ private int tailleTableau() { int taille; System.out.print("Entrer le nombre d'employé dans l'entreprise: "); taille = Clavier.lireInt(); return taille; } }![]()
Partager