Bonjour,
D'après ce que j'avais compris lorsque la méthode hashCode créer un code identique pour 2 valeurs, c'est la méthode equals qui ajuste la bonne valeur,
Dans mon test (avec un hashcode volontairement absurde) pour 1clé ayant 2 valeurs je n'ai qu'une valeur qui s'affiche.
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 package applihashtable; import java.util.*; public class Roman { /** Creates a new instance of Roman */ private String nomO; private int noIsbO; public Roman(String n, int i) { this.nomO = n; this.noIsbO = i; } public void setNomTitre(String n){ this.nomO = n; } public void setNoIsbn(int i){ this.noIsbO = i; } public String getNomTitre(){ return(this.nomO); } // public int hashCode(){ return (this.nomO.length()); //Je considère le nb de char du titre comme hashcode (volontairement //absurde } public boolean equals(Object obj){ return (this.noIsbO == ((Roman)obj).noIsbO); //Pour des clé identique on teste le numéro ISBN de l'instance en cours //que l'on compare au cast de l'objet transmis' //Note si les 2 romans ont le même ISBN equal n'en ressort qu'1 !!!' } }le println ne me renvoi que A l'Est..
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 public static void main(String[] args) { Hashtable maTable; maTable = new Hashtable(); Roman livre = new Roman("A l'Ouest", 1); maTable.put(livre.hashCode(), livre); livre = new Roman("A l'Est..", 2); maTable.put(livre.hashCode(), livre); //A l'ouest ET A L'Est... font avoir la même clé : 9' for (Enumeration e = maTable.keys(); e.hasMoreElements();){ livre = (Roman)maTable.get(e.nextElement()); System.out.println(livre.getNomTitre()); }
Merci de votre aide
Partager