Bonjour,

Je souhaite comparer 2 objets ( des livres spécifiés par un titre, auteur, isbn).

J'ai redéfini les méthodes equals et hashCode de la classe Livre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
	public boolean equals(Livre livre) {
		if (titre.equalsIgnoreCase(livre.getTitre())
				&& auteur.equalsIgnoreCase(livre.getAuteur())
				&& isbn == livre.getIsbn())
			return true;
		else
			return false;
	}
 
	public int hashCode() {
		return titre.hashCode()+auteur.hashCode()+isbn.hashCode();	
	}
Cependant, le code suivant échoue à assertEquals(a,b) (j'utilise JUnit) :
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
 
	public void testLivreEquals() {
 
		Livre a = new Livre("titre","auteur","isbn");
		Livre b = new Livre("titre","auteur","isbn");
 
		assertTrue(a.equals(a));
		assertTrue(b.equals(b));
		assertTrue(a.equals(b));
		assertTrue(b.equals(a));
 
		assertEquals(a,b);
 
		LinkedList<Livre> c = new LinkedList<Livre>();
 
		c.add(a);
		System.out.println(a.hashCode()+" "+b.hashCode());
		assertTrue(c.contains(b));
 
	}
J'ai vérifié et j'ai bien le même hasCode. La seule différence entre les livres est que j'instancie une LinkedList à la construction du Livre. Cependant, je ne comprend pas pourquoi cette différence est prise en compte alors que j'ai réécris equals() et hashcode() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
	public Livre(String titre, String auteur, String numeroISBN) {
		this.titre = titre;
		this.auteur = auteur;
		this.isbn = numeroISBN;
		numMedia = compteurMedia++;
		listeExemplaire = new LinkedList<Exemplaire>();
 
	}
Qu'est ce que j'ai oublié ?