J'ai fait un petit programme de test pour vérifier que la méthode contains() d'un hashset fonctionne bien avec une classe que j'ai créé dans laquelle je redéfinis la méthode equals(). Eh bien, ça ne fonctionne pas et je ne comprends pas pourquoi.
Voilà le test :
class setUnicite {
public static void main(String [] args) {
Set s = new HashSet();
String d = new String("toto" );
Etat e1 = new Etat(d,true,false);
Etat e2 = new Etat(d,true,false);
Etat e3 = new Etat("toto",true,false);
s.add(e1);
System.out.println("e1.equals(e1) = " + e1.equals(e1));
System.out.println("s.contains(e1) = " + s.contains(e1));
System.out.println("e1.equals(e2) = " + e1.equals(e2));
System.out.println("s.contains(e2) = " + s.contains(e2));
System.out.println("e1.equals(e3) = " + e1.equals(e3));
System.out.println("s.contains(e3) = " + s.contains(e3));
}
}
Et voilà le résultat :
[root@localhost test]# java setUnicite
e1.equals(e1) = true
s.contains(e1) = true
e1.equals(e2) = true
s.contains(e2) = false
e1.equals(e3) = true
s.contains(e3) = false
Et pourtant là où ça devient magique, c'est quand on regarde la specif de contains() :
Returns true if this set contains the specified element. More formally, returns true if and only if this set contains an element e such that (o==null ? e==null : o.equals(e)).
Alors si quelqu'un a une idée sur le phénomène, merci d'avance.