Bonjour à tous,

Parce qu'un bon code vaut mieux qu'on long discours, voici une fonction qui synthétise mon problème :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
private static void test2() {
		HashMap<CoteCouleur,HashSet<Piece>> matching = new HashMap<CoteCouleur,HashSet<Piece>>();
		CoteCouleur c=new CoteCouleur(Cote.HAUT,0);
		CoteCouleur c2=new CoteCouleur(Cote.HAUT,0);
		matching.put(c,new HashSet<Piece>());
		matching.get(c).add(new Piece(2,1,0,2,0));
		if (matching.get(c2)==null) {
			System.out.println("marche pas ? : "+c2.equals(c)+" "+(c2.hashCode()==c.hashCode()));
		}
		System.out.println(matching);
	}

-CoteCouleur est une classe contenant un champ de type enumCote (HAUT est une valeur de l'énumération Cote) et un champ de type int. J'y ai redéfini les méthodes equals et hashCode de sorte qu'elles ne dépendent que de la valeur de ces deux champs.
-Piece est une autre classe dont le contenu ne me semble pas pertinent pour ce probleme (mis à part sa méthode toString qui renvoie la valeur du champ égal au dernier argument de son constructeur)

Comment explique-ton que le résultat de l'execution soit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
marche pas ? : true true
{(HAUT ; 0)=[0]}
puisqu'il me semblait que la hashMap classe les objets selon leur hashCode

Je précise aussi que
ne renvoie pas null...

Merci d'avance !