bonjour,
j'ai un ensemble d'objet auquels sont affecte des scores et j'ai besoin d'une structure qui me permette d'assurer l'unicite des objets et de les ordonner. Par contre, l'unicite porte sur l'objet et l'ordonancement porte sur le score.
J'ai donc cree une classe qui contient l'objet et son score :
et j'ai voulu utiliser un TreeSet en redefinissant les methode equals (pour que l'unicite porte sur l'objet) et en donnant un comparateur (pour que le tri se fasse sur les scores) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 class element { private Object objet; private double score; public boolean equals(Object o) { return objet.equals(((element)o).getObjet()); } }
Seulement, la javadoc specifie que la methode compareTo doit etre coherente avec la methode Equals, ce qui ne serait pas le cas!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public class MaClass { Set set = new TreeSet<element>(new Comparator<element>() { public int compare(element elt1,element elt2) { public int compare(element elt1,element elt2) { double diff = elt1.getScore() - elt2.getScore(); return (int)(diff+Math.signum(diff)*0.5); } }); } }
j'aimerais donc savoir comment avoir une structure qui me permettent l'avoir l'unicite et un ordonnancement qui portent sur des attributs differents.
Partager