[Collections] Redéfinir la méthode compare de l'interface Comparator.
Bonjour,
Dans un des mes programme, j utilise une TreeMap pour sotcké un objet de type Toto.
Or j ai besoin de recuperer a des instant donné le plus petit objet Toto, donc j ai redefinie la methode compare de l interface Comparator.
Mais ca ne marche pas :(.
l erreur qui me donne est :
Exception in thread "Thread-2" java.lang.ClassCastException:
main.Test
at java.util.TreeMap.compare(Unknown Source)
at java.util.TreeMap.put(Unknown Source)
...
Voici comment j ai fait :
J ai une classe MyTreeMap
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class MyTreeMap extends TreeMap implementes Comparator {
public MyTreeMap() {
super();
}
public int compare(Object obj1, Object obj2) {
Toto toto1 = (Toto) obj1;
Toto toto2 = (Toto) obj2;
// Ici je compare pour savoir si toto1 < toto2 ou toto1 > toto2 ou toto1 = toto2
....
}
} |
L exception est lance quand j utilise mon objet MyTreeMap pour ajouter un element Toto.
Quelqu un pourrais me dire ce qu il faudrait faire pour remedier a ce probleme.
Thx.
Re: Redefinir la methode compare de l interface Comparator.
Citation:
Envoyé par berg
donc j ai redefinie la methode compare de l interface Comparator.
[mode="cours"] je t'embête juste avec la terminologie : on implémente les méthodes d'une interface, les redéfinir ca n'a pas de sens [/mode]
Bref, il faut que ton objet implémente l'interface Comparable (http://java.sun.com/j2se/1.3/docs/api/java/lang/Comparable.html) et non pas comparator. Tu dois donc doter ton objet de la méthode compareTo(Object o) qui renvoi un entier :
0 si tes 2 objets sont de même ordre
<0 si l'objet courant est d'ordre inférieur
>0 si l'objet courant est d'ordre supérieur
Après, tous les tris fonctionnent. :D