Bonjour à tous,
J'ai un problème lors de l'utilisation d'une Hashmap. Je défini une classe Position qui me servira comme clé et valeur de la hashmap. Dans cette classe j'ajoute les fonctions equals(Object), hashCode() et equals(Position) (je ne suis pas sûr de l'utilité de cette dernière mais dans le doute je l'ai tout de même mise). Cela me donne la classe suivante :
Je définie ensuite une hashmap de la façon suivante :
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 public class Position { private int i; private int j; private int k; Position (int x, int y, int z){ i = x; j = y; k = z; } public int getI(){ return i; } public int getJ(){ return j; } public int getK(){ return k; } public String toString(){ return "(" + i + "," + j + "," + k + ")"; } public boolean equals(Position p){ boolean result = false; if( this.i == p.i && this.j == p.j && this.k == p.k) result = true; return result; } public boolean equals(Object o){ boolean result = false; Position p = (Position)o; if( this.i == p.i && this.j == p.j && this.k == p.k) result = true; return result; } public int hashcode(){ return this.getI()+this.getJ()+this.getK(); } }
J'ajoute dans hm un certain nombre de positions (pour l'instant la clé et la valeur de chaque élément sont identiques), exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part HashMap<Position, Position> hm = new HashMap<Position, Position>();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Position p = new Position(1, 2, 3); hm.put(p, p);
Le problème est que la fonction HashMap.get me renvoi null lorsque je l'utilise de la maniere suivante : hm.get(new Position(1, 2, 3)). De plus la fonction hm.containsValue(new Position(1, 2, 3)) renverra bien true tandis que la fonction hm.containsKey(new Position(1, 2, 3)) me retournera false.
Si j'affiche le contenu de hm, j'y vois bien appraître le champ : (1,2,3)=(1,2,3).
Je ne comprend pas pourquoi les fonctions containsKey et get de HashMap ne me renvoient pas ce que je veux. Au débugage il semble que les fonctions hashcode et equals ne sont pas appelées lors des appels a get et containsKey (tandis que pour la fonction containsValue, il y a bien des appels à la fonction Position.equals(Object)).
Je dois rater quelque chose mais je ne vois vraiment pas quoi. Auriez-vous une petite idée ?
N'hésitez pas à me demander plus détails si besoin. Merci d'avance !
Partager