Valeur de hashage dans les HashMap
Bonjour,
J'ai un problème avec le valeurs hash stockées dans la table d'une hashmap...
j'ai par exemple une classe :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
class Position {
public int X, Y;
public Position(int x, int y) {
X = x; Y = y;
}
@Override
public boolean equals(Object O) {
return (X==((Position)O).X && Y==((Position)O).Y) ? true : false;
}
@Override
public int hashCode() {
return X + (Y<<16);
}
} |
et une map avec son utilisation:
Code:
1 2 3
| public Map<Position, Long> mp1 = new HashMap<Position, Long>();
Position P1 = new Position(1, 4);
mp1.put(P1, 0L); |
La valeur de hashage est d'après ma classe 0x40001 or je retrouve dans la table de la map (en utilisant le debugger de Eclipse) une valeur de hash 0x40005, comme si la valeur de hash stockée dans la map était faite par un XOR entre les 16 bits de poids forts et les 16 bits de poids faibles.
Pour confirmation P2 = new Position(1,5) qui devrait donner 0x50001 donne en réalité 0x50004.
Ai-je loupé quelque chose dans la théorie des maps, dans l'implémentation de HashMap? Je lis partout que la valeur de hashage est sur 32 bits sans plus de détails.
Toutes les remarques sont bienvenues.
Merci à tous...