Comparer 2 objets simples  avec equals() & hashCode()
	
	
		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:
	
| 12
 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:
	
| 12
 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:
	
| 12
 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é ?