HashTable : Problème pour récupérer une valeur
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 :
Code:
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);
} |
Et le résultat :
Code:
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 |
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.
Bon, il y a surement une explication logique, mais pour l'instant je n'en vois pas.
Merci d'avance