EDIT: J'ai lu quelque part que HashTable était mal, j'ai donc remplacer par HashMap, le problème reste le même.
Bonjour à tous,
Dans le cadre d'un projet, j'utilise une classe possédant plusieurs hashtables.
Jusqu'ici rien de très compliqué.
J'ai un objet Position, qui contient deux entier x et y et pour lequel j'ai redéfinit la méthode hashcode().
Donc, dans une de mes hashtables, la clef est de type Position.
Le problème, c'est que j'ai l'impression que pour deux Positions avec le même hashcode, je n'atteint pas la même valeur.
Bon, je ne sais pas si je suis très clair, donc je vais vous mettre un bout de code et son execution pour mieux comprendre le problème.
Ma fonction qui fait normalement deux lignes mais que je debug à grand coups de println :
Et le résultat :
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 public void modifierCase(Position position, String input) { Case caseAModifier = this.getCase(position.getLibelle()); Position p; Set<Position> positions = this.cases.keySet(); Iterator<Position> iterateur = positions.iterator(); while(iterateur.hasNext()) { p = iterateur.next(); System.out.println("p.hashcode : "+p.hashCode()); System.out.println("this.cases.get(p) : "+this.cases.get(p)); } System.out.println("position.hashCode() : "+position.hashCode()); System.out.println("this.cases.get(position) : "+this.cases.get(position)); System.out.println("this.cases.containsKey(position) : "+this.cases.containsKey(position)); System.out.println("caseAModifier : "+caseAModifier); this.cases.get(position).setInput(input); }
Donc, ce que je veux montrer par là, c'est que pour deux positions p et position ayant le même hashcode(), dans un cas le get me renvoie une valeur, dans l'autre il ne trouve rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 p.hashcode : 2218 this.cases.get(p) : org.sparksheet.model.formule.Case@e7b241 position.hashCode() : 2218 this.cases.get(position) : null this.cases.containsKey(position) : false caseAModifier : org.sparksheet.model.formule.Case@e7b241
Bon, il y a surement une explication logique, mais pour l'instant je n'en vois pas.
Merci d'avance
Partager